rustc: convert owns_new_managed to reaches_new_managed.

When we're tracing, we don't just care about what's stored unboxed in a
value, but whether we can possibly get to a #[managed] value via
pointers.
std::gc: convert to a tracing garbage collector.

For the moment, this is designed around a non-special trait `Trace`,
which allows values to precisely inform the GC of their contained Gc<T>
pointers.

Unfortunately, the fact that the trait is just like any other means that
generic data structures require a `Trace` bound on their generics
always, to be able to register themselves with the GC, even for
substitutions of the parameters that don't contain any Gc<T> types at
all.