std::gc: add a true garbage collector and use it for  `Gc<T>`.

The garbage collector is a naive mark-and-sweep collector that is
conservative on the stack and mostly conservative on the heap.

This currently will not scan through ~, @, ~[] or @[], nor in any of the
global or task/thread local storages. Hence, `Gc<T>` placed in the wrong
spot may be deallocated while still live, and so all borrowing methods
are marked unsafe. (And `Gc<T>` is marked `#[experimental]`.)
std::gc: support running destructors on values in Gc<T>.
std::gc: add root registration functions, using type information to
shortcircuit when possible.

In theory, this design (using `owns_new_managed` to detect when a type
contains `Gc<T>`) means a smart pointer/alternate vector can just
unconditionally call `register_changes_root` and not worry about whether
this is actually necessary (that is, whether the memory regions actually
needs to be scanned for pointers) because those two functions do it
themselves.
Add the library defined vector type from rust-core.
std::libvec: make it GC safe.
std: add Uniq<T>, a GC-safe version of ~.