Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
How does this interact with raw pointers that denote arrays, like `*mut u8` almost always does?