Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
It's not really "magical" if you invoke `cast()` (or `transmute()`, whatever we name it) explicitly. This kind of thing is the whole point.