Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
When the impl is for `&T` (for some `T`) and the method takes self by reference (`&self`). This was common pre-DST, but even with DST it still happens enough to be required.