This comes out of my comments on D99041. The general strategy is:
- Change <concepts> to use `__invoke` instead of `invoke`, so it can include `<__functional_base>` instead of `<functional>`
- Split out `__search` into <__functional_search>, so `<algorithm>` can include `<__functional_search>` instead of `<functional>`
- Split out the lifted operators into `<__functional_ops>`, so many headers (notably `<valarray>`, `<numeric>`, and `<set>`) can include `<__functional_ops>` instead of `<functional>`
I claim that if this (notably the `<concepts>` change) has any noticeable effect on correctness, then either buildbot should catch it, or else we need some new regression tests.