Modify providing factory defaults, allow instance and fake

This modifies how factory defaults are provided. This switches the
factories to use a more DSL based approach. Instead of passing a
hash, a block can be passed and defaults can be set using it.
This expands model factories to accept defaults for fakes and
instances along with defaults that apply to both. The pattern of
using specific to generic defaults still applies, so instance
defaults will win out over defaults for both. For consistency,
record factories now have their defaults set using a block, but
other then that, their defaults haven't changed.

I also updated the factory tests to be more robust. This properly
tests all the individual cases separately and ensures proper
behavior.