Rewrite the way user types work.

- Instead of naming user types by strings and using this to identify
  them, identify them structurally based on the C++ type.

This makes way more sense, makes everything work nicer, and lifts a
bunch of bizarre restrictions.

- Registering types now just means giving them a name. Types can have
  many names and member functions can be registered before the type is
  named.
- Each typename of a managed type gives a potentially different
  constructor. This is a little bit odd but it kind of works.
- Managed and unmanaged versions of the same type can be used in the
  same Context.
- Lots of weird stuff can be deleted.

Still todo: more extensive tests for the new possibilities, some other
cleanup.