Return [self copy] if auto-copying an object that conforms to NSCopying
Use NSMutableSet instead of NSMutableArray to keep track of copied properties