Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
How does that work?  As written, it seems like you could [manually] call coerce() to convert any `Rc<T>` to any other.