Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
Is this correct? It seems like it should either be `T: Cast<T2>` rather than `Extend` or `impl Extend` rather than `Cast`. (`T: Extend<T2>` does not imply that `Bundle<U2, T2>` and `Bundle<U, T>` have the same representation, which is what `impl Cast` is stating.)