Generalize object and type parameter bounds

An RFC summarizing type system changes that close up rust-lang/rust#5723 and related bugs.
You defined `IsNothing` above but don't use it in this list.