Fix a default method polymorphism bug.
Add a to_owned_vec method to IteratorUtil.
Refactor a bunch of lookup_vtable to reduce rightward drift and clean things up.
Improve vtable resolution.

Improve vtable resolution in a handful of ways.  First, if we don't
find a vtable for a self/param type, do a regular vtable search.  This
could find impls of the form "impl for A". Second, we don't require
that types be fully resolved before looking up subtables, and we
process tables in reverse order. This allows us to gain more
information about early type parameters based on how they are used by
the impls used to resolve later params.

Closes #6967, I believe.
Fix some impls such that all supertraits are actually implemented.
Have vtable resolution check for supertrait bounds. Closes #4055.
Properly track and export information about vtables for impls in metadata.

Partially rework how vtables are handled in default method calls.
Closes #7460.
Major rework of how calls to self and super methods work.

Eliminates method_super, method_self, and vtable_self, merging all of
them into the param cases.
Cloes #4396. Closes #7301.
Fix the issue-3979 tests and add a new test.
Change each_bound_trait_and_supertraits to take a vec of TraitRefs.
Fix vtable resolution for self to search supertraits. Closes #7661.
auto merge of #8015 : msullivan/rust/default-methods, r=nikomatsakis

Lots of changes to vtable resolution, handling of super/self method calls in default methods. Fix a lot of trait inheritance bugs.

r? @nikomatsakis