Trait based inheritance

This is largely based upon #9 and #91, but fleshed out to make an actual inheritance proposal.
    fn evil_id<T: 'static>(mut arg: T) -> T {
        if let Some(an_int) = (&mut arg as &mut Any).downcast_mut() {
            *an_int = 666i;
        }
        arg
    }

I shouldn't be able to do this. I should have to specify `T: Any`. (I should be infer from the absence of an `Any` bound that the function *won't* do something like this. `'static` should only mean `'static`.)