Move Models module to have an init method that sets up all models

resolves #2170

- creates a models.init() function that requires all other model files
and caches them.  This is opposed to the previous functionality where
when you require('./models') it would immediately require all other models.
Now it's done when you want.

- Updates all tests to reflect the new structure of the model module
I'm curious if we still need this extra deferred object now that we don't have to later require the server file.  I didn't want to undo all that work as it makes me nervous it'll cause a regression, but curious about it nonetheless.