Lifetime Parameter Variance

- Declare variance of lifetime parameters in structs
- Handle variance of lifetime parameters in subtyping
- Check struct declarations for coherent variance
This seems stronger that necessary. For example, if I have:

struct Foo<contra 'a> { ... }
struct Bar<in 'a> { ... Foo<'a> ... }

that should be ok.