Enhance `FakeRecord` to store schema and association class info

This updates the `FakeRecord` DSL to store schema information for
attributes and to store association classes with associations.
This will allow advanced features with factories and stacks in
MR. `FakeRecord` still behaves the same, it will not try to
type-cast any values. This allows it to still be flexible in
tests.