Simplifying by Complicating?

* Moving API to a module
* Using Abstract Classes to create a base that can be implemented, extended or overridden outside the API
* Allows us to maintain the API strictly as a module - makes things a little cleaner