Move subclasses out to their own files.

This was bugging me. It's kind of awkward to have to define the empty class
first, but that way we don't end up with circular requires.