Introduce variance for type parameters, not just region parameters

In short, `Option<&'static T>` ought to be usable where `Option<&'a T>` is expected. These changes have been [fully implemented](https://github.com/nikomatsakis/rust/tree/variance-defaults).

[Rendered view.](https://github.com/nikomatsakis/rfcs/blob/variance/active/0000-type-parameter-variance.md)