We completely decouple TypeSet and TypeDescriptor and expose the former
as a public class, so we can use it from outside. This means we don't
necessarily need to fiddle with TreeIters if we know what we need from
the TypeDescriptor. We also slit up VCardTypeMapping in a separate file,
and put all the logic whether something matches or not as methods of
that struct.
This commit cleans up a lot of the mess in TypeSet. I'm afraid that
means it's quite a large diff, but from now on, the code should be more
decoupled than before, making changes at the very least bearable.
There's also some more debug statements, which should help in case
something goes wrong when running at one of our users.