Refactor CollectionPersister delete/insertRows methods
Refactor UoW::cascadePersist() to use association mappings
Add UoW methods to check scheduling of PersistentCollections

The deletion check method already existed but it was broken due to a typo.
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.
Improve persistence of nested collections within embedded documents

Aside from general refactoring, behavior of nested collections has changed. Previously, nested collections were only included if the strategy was not "set"; however, keys were used as-is, which might have caused gaps and resulted in a BSON object being stored in lieu of an array. This fix only ignores nested collections if they are already scheduled for deletion/update (decided in UoW::computeAssociationChanges()). For "pushAll" and "setArray" strategies, a collection to be stored will also first be numerically reindexed to avoid gaps.
Refactor testNestedEmbedManySetStrategy()

The test should cover the same functionality, as this is largely a cosmetic change.
Test for ReferenceMany with "set" strategy and string keys (#499)