librustc: Remove a bunch of `@` boxes from `Match`.

This will be needed to add `'static` bounds to `@`.
librustc: Remove `&` inside `@` from borrowck/check_loans.
Start of data structure cleanup for trait system. Get rid of CoherenceInfo, make trait_impls less bogus.
Refactor some coherence/method trans code, add an impls map to tcx.

Rewrite method_with_name_or_default to use the new impls map.
Get rid of ProvidedMethodsMap.
Get rid of resolve::MethodInfo. Closes #4946.
Add provided method information to ty::Method. Get rid of ProvidedMethodSource.
Refactor a handful of stuff in the metadata encoder.
Export information about used default methods instead of regenerating it. Closes #7862.
debuginfo: Began refactoring of composite type handling.
debuginfo: Renamed *reference-to-* test cases to *borrowed-*
debuginfo: Removed some misleading comments from test cases.
debuginfo: Refactored vec slice code to use the new infrastructure. Added test cases for vec slices.
debuginfo: Refactoring of composite type info generation done.

There is no more StructContext now. Better support for boxed vectors in there too.
debuginfo: Replaced vec::mapi with iterator version.
debuginfo: Added test cases for packed structs (/w drop)
debuginfo: Added support for c-style enums.
debuginfo: Support for tuple-style enums (WIP)
debuginfo: Better support for univariant tuple-style enums.
debuginfo: Added support for struct-style enums.
debuginfo: Fixes related to changed memory layout of unique allocations