Use new when we need a new object

YAML loading and finding a record are not the same thing. `new` with
user params vs finding a record are much closer. This also means that a
user would be able to override `initialize` and have the same behavior
as they would get from an `after_initialize` callback.

We had a few cases where data existed in tests that wouldn't be possible
in the real world, and appear to have just acquired some cruft from
unrelated changes. (How would an abstract class get into the DB? You
wouldn't be able to create it?)