Type conversions

Casting and coercions. Adds custom DST coercions for smart pointers. Otherwise, mostly descriptive, with a few bits of tidying up.
This is not new (afaik, I'm sure I pulled this out of the compiler, but it was a while back).

I don't see a reason not to allow the corresponding string cast. Anyone object?