Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
`'static` should mean `'static` and `impl<T: 'static> Trait for T` should also mean that you always get Trait when you have `'static` - I see no reason why this is at all unreasonable.