Implement debug printing for tcx interner sty's.
Store Substs in an arena in the tcx.

This current inflates memory use more than 3 times.
Intern substs before storing them in the tcx.

This cuts memory use dramatically from the previous commit, and reduces
use overall. E.g. the memory usage of `rustc -O librustc/lib.rs` seems
to drop 100MB from 1.98GB to 1.88GB (on one run anyway).
Switch Region information from uint to u32.

This reduces memory use for building librustc with -O from 1.88 to 1.76
GB.
Intern BareFnTys to make sty slightly smaller.

This cuts the ty_bare_fn variant to 48 bytes rather than 56. There
doesn't seem to be a noticable memory usage decrease from this.
Collect tcx arenas into a single struct.

This allows expanding how many arenas exist without users having to
care, since they are all created with CtxtArena::new().
Intern Region in tcx.

This makes sty only 32 bytes on machines with 64-bit pointers.
Print info from the barefn and region interners in the tcx.
Slash the ast::Stmt type from 104 to 24 bytes.

(on platforms with 64-bit pointers.)

The StmtMac variant is rather large and also fairly rare, so let's
optimise the common case.
Fix rebase artifacts.
Add the -Z print-enum-sizes flag for displaying enum info.

This replaces required the RUST_LOG=... invocation to make it much more
user friendly.
Rebase fixes.

I've totally mangled the history with these rebases; sorry, future programmer!
Update rustc_driver tests.
More rebase fixes.
auto merge of #19549 : huonw/rust/middle-ty-2, r=nikomatsakis

This takes building `librustc/lib.rs` from using 696 MB to 588 (`rustc --no-trans`), and 1.99 GB to 1.87 (`rustc -O`). It also reduces `sty` down to 32 bytes on platforms with 64-bit pointers, at the expense of some more side-tables in `ctxt`. I'm sure there's more gains to be had from reducing the size of the side tables (e.g. by making the actual things they're storing smaller).

r? @nikomatsakis
Refactor various queries out of `ty` and into `trans/common`
Make ExprUseVisitor<..> use inherited parameter environments.
Move the TypeContents-based "Sized" queries into trans, where the full
types are always known and hence the ParameterEnvironment is not
necessary. For other `Sized` queries, use the trait infrastructure
just like `Copy`.
Rewrite the intrinsicck to take the parameter environment into account. Also fixes #20116.
Rename `trait_ref` field to `predicate`, since `trait_ref` is really
overly general, and the value is always *some* sort of predicate.