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)
Document state is already managed by this point
Fix nested EmbedMany set strategy test for CollectionPersister

Embedded documents should not be processed during insertion changeset calculation, as they will be handled by the parent document.
Check for setArray strategy in computeAssociationChanges()

Associations with the setArray strategy should be handled just like set (scheduled for update even if not at the top level).

This commit also consolidates the if statement for marking collections as visited.
Do not assert that empty arrays remain unset
Add addToSet strategy for persistent collections

Conflicts:
	lib/Doctrine/ODM/MongoDB/Persisters/CollectionPersister.php