Validate object graphs for cycles in composites on first commit

Also fix a bug that was breaking validation of COObject instances in relationships when there's no user-supplied subclass.
This looks ok. 

In the long run, I'd like to introduce -[ETModelDescriptionRepository entityDescriptionForObject:].

I have observed a similar issue with this method, when a class object is stored as a property value in the variable storage or in an ivar (while persisted with a class-to-string transformation). The check succeeds, but the logic is incorrect. It succeeds for two reasons:
-  -isValidValue:type: doesn't check the value argument in this case
- +[NSObject class] doesn't return the metaclass but the same than -[NSObject class], which means -entityDescriptionForClass: won't return nil

With an API such as -entityDescriptionForObject:, we could detect:
- the argument is class object and return the root entity (NSObject)
- the argument is a COObject instance and return -[COObject entityDescription]

Then we would replace -entityDescriptionForClass: calls by -entityDescriptionForObject:, where we called -class on the argument before calling -entityDescriptionForClass:.