Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
> I assume this is what @glaebhoerl meant

Yes. Basically I like this option because it's the most minimal one (apart from an attribute, which I think is *too* minimal) which accomplishes what we need. 

We *could* have something like `struct Child: Parent`, but that has other implications which are out of scope with respect to our goals here. If it's just e.g. sugar for lifting the fields of `Parent` directly into `Child` without implying subtyping voodoo, then I wouldn't necessarily mind having it, but I think it would be best discussed as a separate proposal.