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 - This is just the feature branch I merged all the split fake record commits into. I wanted to see the benchmarks compared with what is in master and just all the changes as a whole. Adding 1500 and only removing 800 seemed like to many additions at first, but if you just take the fake record and tests makes sense. I added 160 lines to the fake record logic and 572 lines to the fake record tests, so that explains it. Looking at the line stats, I don't think I previously had very good tests with the fake records. They previously had a 1:1 ratio of code to test. It's now closer to 1:2 ratio.

Nothing to review here, just interesting to look at.