Use better ActiveRecord association methods for factories/stacks

This is a small refactor that switches to using "better"
ActiveRecord association methods. This changes from using the
`type` and `macro` methods for associations to using the booleans
`belongs_to?` and `collection?`. These require less
equality-checking and instead rely on the association object to
handle determining what it is or isn't. The fake record and it's
associations were updated as well to mimic this. I chose to go
with a similar boolean flag usage on the model associations to
be consistent and I think it's preferred to not hard check class
types and instead expect interfaces.
Commonize applying args logic from record and model factories

This commonizes the logic for applying args between record and
model factories. This is to setup some new features related to
this logic. This commonizes most of the logic and makes the
behavior consistent between the two kinds of factories.
Have factories build associations when provided in defaults

This modifies the factories applying args behavior to build
associations when provided defaults for them. This only occurs
when an association is not already set on the record/model.
This sets up providing defaults before a stack begins walking the
dependency tree. This way a record can set polymorphic data on
a model it depends on and the stack will be able to traverse the
associations.