Allow passing nested fields/attributes to factories

This updates factories to handle being passed a hash of nested
fields/attributes. This will allow easily defaulting fields of
associated objects. This is primarily intended to be used in
conjunction with stacks, to help with passing validations and
receiving objects in an expected state. If an associated object
is not present when applying the passed args, then any args
intended for that object are ignored. This allows regular instances
and fakes from factories to continue working as before.