Place parenthetical notation under the `unboxed_closure` feature-gate.
Consolidate the `unboxed_closure_sugar` and `unboxed_closure` feature gates.
Pull out the fn-sig sub/lub/glb code and generalize it into a `higher_ranked` module. Also moves the docs to a more suitable place.
Switch the code to use De Bruijn indices rather than binder-ids.
Introduce some sanity checking assertions in trans, erase regions more aggressively.
Make it an error to use parenthetical notation with
something other than a trait type.
Convert TyPolyTraitRef to accept arbitary bounds, so that things like
`Box<for<'a> Foo<&'a T> + 'a>` can be accepted. Also cleanup the visitor/fold
in general, exposing more callbacks.
Stop checking the correctness of explicit self twice; instead, just
use simple pattern matching to take a guess at what the method's self
category is in astconv, and check it more thoroughly later.
Miscellaneous reformatttings and renamings.
Test resolving of names with `for` binders.
Introduce machinery for higher-ranked TraitRefs
Allow impl's to have late-bound regions. Introduces another level of
region binding at the impl site, so for method types that come from impls,
it is necessary to liberate/instantiate late-bound regions at multiple
depths.
Update tests for `()` notation to use traits not structs
Update test for equivalency to include region binders in object types, add new tests relating to HRTB, consolidate the `unboxed_closures` and `overloaded_calls` feature gates.
Fix merge conflict about `[]` coercions in new tests
auto merge of #18993 : nikomatsakis/rust/hrtb-5, r=pcwalton

Enough said.

Fixes #18639.

r? @pcwalton (or someone else?)

This is a [breaking-change]. In particular, several feature gates related to unboxed closures were consolidated into one (`overloaded_calls`, `unboxed_closure_sugar` => `unboxed_closures`). Otherwise, I think everything that worked before should still work. File a bug and cc @nikomatsakis if you find otherwise. :)