Refactor models to be a bit more modulerized

Still more work to do and tests are failing all over the place.

Refactor the models to work like django's CBVs instead of using hooks
like they do in the current iteration