Generalize object and type parameter bounds

An RFC summarizing type system changes that close up rust-lang/rust#5723 and related bugs.
I'm unclear about the scope of the fresh variables here - are the two `'a`s the same variable or different?