Change "set" collection strategy behavior and introduce "setArray"

Previously, the "set" strategy would set individual fields within a collection of objects instead of setting the entire collection. This lead to incorrect behavior with some nested object hierarchies and a bug with ReferenceMany collections (see #499). The "set" strategy will now overwrite the entire collection, obviating the need for separate delete/insert steps.

A new "setArray" strategy was added to ensure that the array being assigned is numerically reindexed. This is helpful in situations where "set" is desirable, but the user does not want a BSON object stored in MongoDB due to key gaps (e.g. after removing an element in the middle of the collection).

The "pushAll" strategy should remain consistent with existing behavior, although its methods were refactored.