Syntax -- unify trait superbounds and parameter bounds, as well
as closure bounds. Parse region bounds uniformly, rather than
special-casing 'static.
Change how we represent bounds:
- Use ParamBounds for type parameter bounds
- Use ExistentialBounds for object/closure types
- Replace the "supertrait" list with a ParamBounds, since that is
  what it really is, and because it can include region bounds
- Introduce lifetime parameter bounds
Subroutine for compute what relations must hold for a type to be well-formed
Refactor regionck to use a new predicate, type_must_outlive. Move responsibility
for checking object casts into regionck from kindck.
Check that type definitions are well-formed.
region_inference -- update to support "verifys" and "givens",
which enable us to check things like `A:'a` (that's a verify)
and to support constraints like `'a <= $0` (where $0 is an
inference variable).
Introduce region obligations, which are a way for type checker
to record things that regionck will have to later verify.
Guarantee that path type parameters outlive path itself.

This is needed to close a subtle type hole. Without this change, it is possible
to instantiate a type parameter and have it reference regions that are not in
scope at the point where it was instantiated.  This is demonstrated by the test
attached in this post.
Update error reporting to be as helpful as I can make it.
ppaux -- misc pretty-printing improvements
Miscellaneous cleanup
rustdoc -- update for region bounds
feature-gate -- remove issue_5723_bootstrap feature
Unboxed closures were incorrectly inserting a region parameter into the substitution that did not correspond to any region parameter declared on the trait.
Adjust nits from pcwalton