Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
This is essentially saying that `Typed` would have an associated `static` rather than associated `fn`s:

    trait Typed {
        static TYPE_ID: TypeId;
    }

Associated `static`s are part of the [proposal for associated items](https://github.com/rust-lang/rfcs/pull/195) by @aturon.