-Finish plugin-like refactor. AbstractMode finds child classes and new
modes can be added dynamically. Potentially one could skip them, and if
they don't exist on the passpath, they will not be loaded.
-Add some google stuff to reflect easier (get child classes)