Reapplication datamodel

Changes required to the data model to support the re-application work.

This includes a major refactor to the way that models are handled.  They now each have logically separate files (based approximately on usage or area of the data model they pertain to), and are imported to the models module in the __init__.py for that module.