Persistence fails when objects and/or lazy loading are involved...
The fix for #3451 in r2591 has some side effects - even after adding something to a proxied SplObjectStorage it is not marked as dirty, thus the content is no longer persisted.
- activating a lazy loading proxy multiple times (as can happen if it is handed out without being activated first) marks it clean in the parent multiple times
- memorizeCleanState() needs to clone objects not just copy them, so comparison later makes sense
- isDirty() must not use strict comparison on objects - a clone is never same, but can only be equal