Permit perfect forwarding for `Fn` traits

Rewrite how the HRTB algorithm matches impls against obligations. Instead of impls providing higher-ranked trait-references, impls now once again only have early-bound regions. The skolemization checks are thus moved out into trait matching itself. This allows to implement "perfect forwarding" impls like those described in #19730. This PR builds on a previous PR that was already reviewed by @pnkfelix.

r? @pnkfelix 

Fixes #19730 
I don't know if you care, but by the end of this series of commits, you have revised the contents of `hrtb-just-for-static.rs` so that it has different function and type variable names than the transcription provided here.  I am capable of doing the necessary alpha-renaming as I read them side-by-side, but if you're going to the trouble of pointing someone to the test case, you may want to ensure that they actually are literal matches.