Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
Yeah, `*T` -> `*U` for any `T` and `U` with any combination of mutability seems to be accepted right now but I'm not seeing it listed here. Would be sad to see it go away!