Flushing new collections

this includes and fixes https://github.com/doctrine/phpcr-odm/pull/477, https://github.com/doctrine/phpcr-odm/pull/480 and https://github.com/doctrine/phpcr-odm/pull/483

there might still be room to simplify code here but some of the simplifications I have already done have this feeling like they could cause issues in edge cases.
we need to make it possible to overwrite a ``PersistentCollection`` to force overwriting the current state. that being said, we might also want some way to easily change the order of a collection without having to overwrite the ``PersistentCollection``.