Create `MR::Model::Configuration` mixin

This moves the the base configuration for a `MR::Model` into
a separate mixin. The goal of this is to properly split up the
model's interface into smaller components that work together.
This is easier to test and doesn't mix separate sets of logic.
This is an internal change to the gem and won't change the
behavior of including `MR::Model` to create models. This doesn't
change any of `MR::Model`'s behavior yet. This is just setting
it up.

Related to #70
Merge pull request #96 from redding/jcr-split-configuration

Create `MR::Model::Configuration` mixin
Create `MR::Model::Fields` mixin

This moves the the fields logic for a `MR::Model` into a separate
mixin. The goal of this is to properly split up the model's
interface into smaller components that work together. The fields
mixin uses the base configuration mixin. For the most part, this
is an internal change and will provide the same interface that
`MR::Model` currently does. This doesn't change any of
`MR::Model`'s behavior yet. This is just setup for changing it
later.

Related to #70
Merge pull request #102 from redding/jcr-split-fields

Create `MR::Model::Fields` mixin
Create `MR::Model::Associations` mixin

This moves the associations logic for a model into a separate
mixin. The goal of this is to properly split up the model's
interface into smaller components that work together. For the
most part, this is an internal change and will provide the same
interface that `MR::Model` currently does. This doesn't change
any of `MR::Model`'s behavior yet. This is just setup for changing
it later.

This does some simplification to model associations. When adding
polymorphic belongs to associations, we made it so an association
doesn't have to be provided it's model class. This is now true
for all associations. This simplifies them and should also fix
a bug with factories and fake record associations. The factories
would build "real" records instead of fake ones. Now that a model
always looks to it's record's association's record class, it will
use the correct fake or real class.

Finally, this makes associations more friendly in that they will
error if there record doesn't have a matching association. This
helps to ensure strange `NoMethodError` issues are avoided.

Closes #67
Related to #70
Related to #72
Merge pull request #105 from redding/jcr-split-associations

Create `MR::Model::Associations` mixin
Create `MR::Model::Persistence` mixin

This moves the the persistence logic for a `MR::Model` into a
separate mixin. The goal of this is to properly split up the
model's interface into smaller components that work together. The
For the most part, this is an internal change and will provide the
same interface that `MR::Model` currently does. This doesn't change
any of `MR::Model`'s behavior yet. This is just setup for changing
it later.

The only behavior change is that this removes any callbacks from
the persistence methods. We are planning on dropping these from
`MR::Model` so this is part of doing that.

This also includes a minor change to the `Configuration` mixin.
It needs to only run it's `included` hook once. Otherwise, it
causes the configuration to get re-written. I ran into this
while including multiple mixins on the same class.

Finally, this includes some changes to fake records to better
"fake" an actual active record. In the tests, I wanted to
demonstrate how a model proxies it's record's methods. Thus, I
wanted to be able to control more of the state of the fake
record. This meant making `valid?` actually check if the errors
are empty and making the `errors` mutable. This lines up with
active record's actual behavior and provides a more featureful
fake.

Related to #69
Related to #70
Merge pull request #107 from redding/jcr-split-persistence

Create `MR::Model::Persistence` mixin
No longer use `NsOptions` for model configuration

This changes model configuration to no longer use `NsOptions`
for it's configuration. The reason for this is it's faster for
models to not use `NsOptions` and just manually handle
configuration on the class itself. `NsOption` provides a lot
of features for managing options with a nice DSL. Model's never
took full use of these features and really don't need them.

This also includes some minor style changes throughout. This was
mostly made up of removing `{}` from inline hashes and raise the
exception message inline when possible.
Merge pull request #113 from redding/jcr-split-model-remove-ns-options

No longer use `NsOptions` for model configuration
Have association "writers" return the value they wrote

This is a feature that got dropped when I reworked the
model associations. This changes them to work like ruby's
assignment operator (`=`) and return the value they wrote.
Merge pull request #114 from redding/jcr-split-model-assoc-write

Have association "writers" return the value they wrote
Update `MR::Model`, use reworked mixins for behavior

This updates the `MR::Model` to use all the mixins that have been
previously done. This switches from the old behavior to the new
behavior. This includes a few backwards incompatible changes.
These were made in previous commits, but this "turns them on",
by switching the `MR::Model` mixin to use the new logic:

* There is no `mr_config` for accessing the "configuration" of
  a model. The previous options can be accessed with the class
  methods: `record_class`, `fields` and `associations`.
* Using `fields=` to write multiple fields will only take hashes
  and will only write fields. Previously it would write any
  "writer" method.
* Associations no longer take a model class name. This is always
  infered from the associated record class.
* Associations now check there record's for a matching association.
  If it doesn't exist they will throw an exception.
* The `save` method no longer takes a hash of values to apply to
  the model. This should either be done manually or using the
  `fields=` method.
* Model's now have a readable `inspect`.

Related to #29
Closes #67
Closes #69
Closes #70
Closes #82
Closes #91

**Note** This is a backwards incompatible change. The model's
interface has changed and is not compatible with old models.
Merge pull request #115 from redding/jcr-split-update-model

Update `MR::Model`, use reworked mixins for behavior
Merge pull request #95 from redding/jcr-split-model-into-mixins

Rework `Model` into a collection of mixins