Split `FakeRecord` into a set of mixins

This splits `FakeRecord` logic into a set of mixins similar to
`Model` and `ReadModel`. This helps organize and test logic
separately. This will also include cleanups and modernizations
to the `FakeRecord` logic.

@kellyredding - I'm going to use this as a holding bin for the fake record changes. Just like I did for model changes.