Replace association mocking with factories

Not entirely happy with this change as it means
extra hits of the database. Unfortunately various
constraints mean that if we hit the database at
all we need it. Might be able to reduce the tests
that hit the db, but we have logic there that'll
need to be covered.