Generalize object and type parameter bounds

An RFC summarizing type system changes that close up rust-lang/rust#5723 and related bugs.
On Thu, Aug 07, 2014 at 04:08:45AM -0700, Nick Cameron wrote:
> I guess I think that we can special case `&` at least because it is a special case in general (it even has special syntax), I wouldn't necessarily expect to apply the same rules to `Ref`. I agree `Box` is tricky since it should behave like a regular struct. (Although having to rarely have a redundant lifetime seems a price worth paying for simplifying the common case, unless I misunderstand the complications here).

I have been using `Box` as a standin for "a regular struct that does
not implicitly contain borrowed data", basically. So I would expect
e.g. `Box` and `Rc` (and `Vec`) to behave the same with respect to
their type arguments. My bigger point here was that if you said, for
example, that we would apply a `'static` default as the lifetime bound
for object types that appear in a type argument, it would do an
annoying (and almost certainly wrong) thing for `Ref`.

It is also mildly unclear to me whether it makes sense for there to be
one default for the lifetime bound on an object type and a distinct
set of defaults for lifetime parameters. In other words, should people
have to write `&'a SomeStruct<'a>` or should the latter `'a` also be a
default (presuming we did do defaulting for traits)?