Feature/refactoring

These are fairly disruptive changes that are focused on refactoring things into more extensible patterns. I pulled a lot of the override methods into interfaces, removed the tribal classes and a handful of other things.

There is still a lot of work on this front but I don't think I'll get a chance to mess with it much over the holidays so I wanted to get the PR submitted. If any of it bothers you I can split up the changes so you can take what you like and we can deal with the rest of it later.