librustc: Implement arbitrary lifetimes in trait objects.

librustc: Implement arbitrary lifetimes in trait objects. …

All trait objects must be annotated with a lifetime. This means that
code like this breaks:

    fn f(x: Box<Trait>) { ... }

    fn g<'a>(x: &'a Trait) { ... }

Change this code to:

    fn f(x: Box<Trait+'static>) { ... }

    fn g<'a>(x: &'a Trait<'a>) { ... }

This will be eventually addressed by some additions that @nikomatsakis
wants. However, the fundamental thrust of this change is necessary to
achieve memory safety. Further additions to improve ergonomics will
follow.

Closes #5723.

r? @nikomatsakis