Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
Do we actually want `-128i8` to magically turn into `128u8`? Also, would something like `Extend<u8> for u16` be sensible (it seems nearly as semantically sensible as `u8` <-> `i8`, nearly)?