refactor check_call_inner to have a better name and be readable
Move the replacement of bound regions out from `check_arguments` and into check_call / method_resolution
Rather than storing a list of ty::method per trait, store one ty::method
per method and list of def-ids per trait.
Compute a ty::method for methods that appear in impls as well
Pass around a pointer to the ty::method rather than the individual bits of info
Add a (currently unused) "transformed self type" pointer into ty::method
Refactor so that references to traits are not represented using a type with a
bare function store (which is not in fact a kind of value) but rather
ty::TraitRef.  Removes many uses of fail!() and other telltale signs of
type-semantic mismatch.

cc #4183 (not a fix, but related)
Fix various warnings, NOTEs, etc
Add comment explaining method visibility
rustc: Be careful about calls to fn types that contain nested errors
Link lifetimes of autoslice'd vectors (Issue #3184)
Reason about nested free variables that appear in a function
signature.  In a nutshell, the idea is to (1) report an error if, for
a region pointer `'a T`, the lifetime `'a` is longer than any
lifetimes that appear in `T` (in other words, if a borrowed pointer
outlives any portion of its contents) and then (2) use this to assume
that in a function like `fn(self: &'a &'b T)`, the relationship `'a <=
'b` holds. This is needed for #5656.