Add specs, clean up code for cached record parents

Previously, we assumed that an array of cached records always existed
when setting parent properties on new objects (hence the usage of
`firstObject.parents`).

This isn't the case—the `::all` method now
ensures that the `parents` argument is passed all the way down to
`toResult`, ensuring that all cached and uncached records fetched by
`::all` will have the proper parent properties set.