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.