Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
Numeric casts are an omission, I'll add them in.

@ben0x539 what are `T` and `U` here? Do you mean an arbitrary cast from one raw pointer type to another?