Implement Type cloning
Make to_string() on types support all known types

Also amends the explanation of one of them in the header.
minimal_covering_type

This implements a function minimal_covering_type that, given a vector
(or array ref in perl) of Type*'s will return the minimal covering type
according to rules that I pulled out of thing air (kind of). If there's
not covering type, returns NULL / undef. Always returns a newly
allocated object in C++ (unless NULL) and doesn't touch input.

This is still shady in various corners.