Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
`t as *const U` would allow more conversions than the intrinsic would. E.g., numeric conversions.