have LLVM print type strings for us

Example:

    void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)*

Before, we would print 20 levels deep due to recursion in the type
definition.
auto merge of #9815 : thestinger/rust/type, r=huonw

Example:

    void ({ i64, %tydesc*, i8*, i8*, i8 }*, i64*, %"struct.std::fmt::Formatter[#1]"*)*

Before, we would print 20 levels deep due to recursion in the type
definition.
rc: fix docstring
auto merge of #9825 : thestinger/rust/rc, r=thestinger
rc: rename borrow to get

Shorter and same name used by Arc
rc, arc: add copy-on-write mutable borrowing to Rc and Arc
rc, arc: add support for by-value copy-on-write and try-to-write

The try_ functions don't require Clone, but they do nothing if rc > 1

The try_unwrap and value take and return by-value instead of &mut
arc: relax kind bounds on non-constructor

They aren't needed, since arcs without the kinds can't be created
with safe code, and unsafe code should be allowed to do whatever it
wants.

This greatly simplifies libraries using Arc<T> who no longer need
to impose those traits unless they construct arcs.
own: add owned pointer wrapper with API like Rc and Arc
treemap: replace with a potentially snapshottable version