Pour model - DO NOT PULL THIS YET!

@morrisco Can you take a look at what I have so far?  For review/comment only, DO NOT MERGE!

This is mostly just models that have been created and tested (some are still missing tests). Next steps are to try to actually start using them in the code base to refactor other classes which currently have too much responsibility.  I'm not sure what this will look like when it's done but it is probably still far from committable code.