Start moving towards non-magic API

This kind of sucks a bit. Sure it may be less magic but the other was a far
more elegant API. Unfortunately, it provided something completely unintuitive
for the user and the new method will be more user-friendly.

A different way to sort of trick the user could have been to make the
metaclass and then just do
BaseMatcher = metaclass('BaseMatcher', (object,), {})
but then there's lots of magic going on and I'm not sure that's the best
thing. Also, it is probably error prone. If the user defines the matcher in a
separate file which is never imported or used during their testing, they'll
never be able to use their Matcher because python will never load it.
Unfortunate though it is, this way is far less error-prone.