Add `MR::FakeRecord::Attributes` mixin

This adds a attributes mixin for fake records that contains all
the "attribute" related logic for fake records. This is to better
organize the behavior of fake records and make it easier to test.
This is an internal change and doesn't make any changes to the
fake record's behavior yet.

This also removed an unused method from the `Model::Fields` mixin.
I noticed this because the `Attributes` mixin is similar to the
`Fields` mixin and I was using it for reference.
Merge pull request #118 from redding/jcr-split-fr-attributes

Add `MR::FakeRecord::Attributes` mixin
Add `MR::FakeRecord::Associations` mixin

This adds an associations mixin for fake records that contains all
the "association" related logic for fake records. This is to better
organize the behavior of fake records and make it easier to test.
This is an internal change and doesn't make any changes to the
fake record's behavior yet.

Overall, the associations were redesigned to more properly mimic
ActiveRecord. This meant separating out an association and
reflection class. These changes also worked to make the
associations logic maintainable and expandable for future needs.

Closes #68
Merge pull request #147 from redding/jcr-split-fr-associations

Add `MR::FakeRecord::Associations` mixin
Add `MR::FakeRecord::Persistence` mixin

This adds a mixin for fake records that contains all the
"persistence" related logic for fake records. This is to better
organize the behavior of fake records and make it easier to test.
This is an internal change and doesn't make any changes to the
fake record's behavior yet.

This also requires thread in the factory. This should've been
done since it uses `Mutex` for locking.
Merge pull request #148 from redding/jcr-split-fr-persistence

Add `MR::FakeRecord::Persistence` mixin
Fix `FakeRecord::Associations` mixin for polymorphic

This fixes the implementation of associations by ensuring an
association knows it's fake record. This allows polymorphic
associations to read the foreign type and constantize it. In MR,
this is needed by record factories and stacks to properly build
associations as needed.

The previous implementation built reflections from associations,
when ActiveRecord actually does it the other way. Furthermore,
since an association needs to know it's fake record, it has to
be lazily-built when the `association` instance method is called.
Thus, reflections are built when an association method
(`belongs_to`) is called and associations are built from
reflections when `association` is called.
Merge pull request #149 from redding/jcr-split-fr-fix-associations

Fix `FakeRecord::Associations` mixin for polymorphic
Update `MR::FakeRecord` to use new mixins

This updates the `MR::FakeRecord` to use the new mixins for it's
attributes, associations and persistence logic. This also removes
all the old logic, updates factories, stacks and test helpers to
work with the slight changes to the ActiveRecord interface that fake
records provide.

* Added a readable inspect for fake records. This is similar to
  ActiveRecords and particularly doesn't show the saved or previous
  attributes, which made the previous inspects hard to read.
* For factories and stacks, they can now use a simpler ActiveRecord
  interface for there logic. Now that fake records
  `reflect_on_all_associations` will take a type, it can be used
  to find belongs to and has one associations instead of relying
  on a manually selecting reflections using a `belongs_to?` or
  `collection?` method.
* For the test helpers, the attributes now use string keys
  instead of symbols. This was an inconsistency of fake record
  with ActiveRecord that has been cleaned up.
* Switched the benchmarks back to using the full `MR::FakeRecord`
  mixin and using the defined fakes for the test DB's records.
  They had previously been changed to individually test the
  mixins and make sure we weren't taking a performance hit.

Closes #29
Closes #68
Merge pull request #151 from redding/jcr-split-fr-use-mixins

Update `MR::FakeRecord` to use new mixins
Merge pull request #152 from redding/jcr-split-fr-into-mixins

Split `FakeRecord` into a set of mixins