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.
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 #118 from redding/jcr-split-fr-attributes

Add `MR::FakeRecord::Attributes` 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 #147 from redding/jcr-split-fr-associations

Add `MR::FakeRecord::Associations` mixin
Merge pull request #148 from redding/jcr-split-fr-persistence

Add `MR::FakeRecord::Persistence` mixin