Properly implement Show for EnumSet
`rustc main.rs` generates main binary file
Update error messages in compile-fail tests
Take core as a dependency on librlibc. This is needed so that it can
see the lang-items for Sized etc. @acrichto and @thestinger had no
objections.
Guts of the new trait matching algorithm, not yet in use
Port coherence to use the new trait matching code
trans -- stop tracking vtables precisely, instead recompute as needed.
typeck/kind -- stop using old trait framework.

- Unify the "well-formedness" checking that typeck was already doing with what
  was taking place in kind.
- Move requirements that things be sized into typeck.
- I left the checking on upvars in kind, though I think it should eventually be
  refactored into regionck (which would perhaps be renamed).

This reflects a general plan to convert typeck so that it registers
obligations or other pending things for conditions it cannot check
eventually. This makes it easier to identify all the conditions that
apply to an AST expression, but can also influence inference in somec
cases (e.g., `Send` implies `'static`, so I already had to promote a lot
of the checking that `kind.rs` was doing into typeck, this branch just
continues the process).
misc ppaux changes
add Send bound on impl because stricter trait checking requires it
silence various warnings in stdlib, no idea why they suddenly started
Update docs to include Sized trait, which is needed
auto merge of #17244 : spastorino/rust/patch-1, r=alexcrichton
auto merge of #17245 : sfackler/rust/enumset-show, r=alexcrichton
auto merge of #17197 : nikomatsakis/rust/issue-5527-trait-reform-revisited, r=pcwalton

This patch does not make many functional changes, but does a lot of restructuring towards the goals of #5527. This is the biggest patch, basically, that should enable most of the other patches in a relatively straightforward way.

Major changes:

- Do not track impls through trans, instead recompute as needed.
- Isolate trait matching code into its own module, carefully structure to distinguish various phases (selection vs confirmation vs fulfillment)
- Consider where clauses in their more general form
- Integrate checking of builtin bounds into the  trait matching process, rather than doing it separately in kind.rs (important for opt-in builtin bounds)

What is not included:

- Where clauses are still not generalized. This should be a straightforward follow-up patch.
- Caching. I did not include much caching. I have plans for various kinds of caching we can do. Should be straightforward. Preliminary perf measurements suggested that this branch keeps compilation times roughly what they are.
- Method resolution. The initial algorithm I proposed for #5527 does not work as well as I hoped. I have a revised plan which is much more similar to what we do today.
- Deref vs deref-mut. The initial fix I had worked great for autoderef, but not for explicit deref. 
- Permitting blanket impls to overlap with specific impls. Initial plan to consider all nested obligations before considering an impl to match caused many compilation errors. We have a revised plan but it is not implemented here, should be a relatively straightforward extension.
rustc: remove DefArg and DefBinding in favor of DefLocal.
rustc: remove BindingMode from DefLocal.
rustc: add a closure depth to DefUpvar.
rustc: move type definitions from middle::freevars to middle::ty.
rustc: move freevar finding to resolve.