Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
That is a reasonable alternative. It would require an ad-hoc check in the type checker though