Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
The `Cast` requirement is there to ensure that it is even possible for the downcast to succeed - since the actually transformation is done via a transmute, the only way it could possibly be safe is if there is a `Cast` relationship. Technically, it isn't needed, but there isn't any reason not to throw out downcasts that will never succeed.

I believe you are correct about `A: Typed`.