Generalize object and type parameter bounds

An RFC summarizing type system changes that close up rust-lang/rust#5723 and related bugs.
Presentation suggestion: If you write the definition of `-:-` as `'a:'b` (i.e. with formals `'a` and `'b`), do not immediately follow it with an example that uses `'b:'a` (i.e. swapping the arguments), since it is rather easy for someone to overlook that swap and then get very confused by the sentence "the lifetime '`a` was shorter than (or equal to) `'b`" that immediately follows "`'a` outlives `'b`" above.

Instead, either use `'b:'a` in both places, or choose fresh variable names for the concrete example, like
```
foo<'x, 'y:'x>(...) { ... }
```
(the latter is my preference).