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.