Move subst data structures into subst.rs, fix capitalization
Simplify MonoId not to include parameters which, given coherence, are purely derived
Move Def out of syntax crate, where it does not bebelong
Stop passing around Option<&substs> in trans and just pass &substs, making the code more regular
Introduce methods for treating homogeneous tuples as fixed-length arrays.
Add missing test case for contravariant trait matching
Introduce VecPerParamSpace and use it to represent sets of types and
parameters

This involves numerous substeps:

1. Treat Self same as any other parameter.
2. No longer compute offsets for method parameters.
3. Store all generic types (both trait/impl and method) with a method,
   eliminating odd discrepancies.
4. Stop doing unspeakable things to static methods and instead just use
   the natural types, now that we can easily add the type parameters from
   trait into the method's polytype.
5. No doubt some more. It was hard to separate these into distinct commits.
Fix resolve to not permit refs to type vars from outer fns
(Fixes #14603)