Rework `Model` into a collection of mixins

This reworks the `Model` into a collection of mixins for better
organization, testing and possibly sharing with `ReadModel`. This
will also simply the interface and focus on updating associations
so they can be "more useful" to factories and stacks. This is a
re-work of the `Model` mixin based on what we've found in using it
in a real application.

@kellyredding - There are no changes to this branch yet (just an empty commit). I'm going to be pointing other PRs at this branch and collecting the changes. I want to be able to backout or cherry-pick changes into master as easily as possible.