Makes CDTAbstract/Pull/PushReplication conform to NSCopying.

This ensures that the replication configuration cannot change after
the instantiation of the CDTReplicator object, which could cause some
bugs.

The other PRs overlap only a bit with this -- CDTReplicator.m  But it will be easier to wait for the ones before it and rebase after they are merged.
Don't use the convenience constructor from within the class, particularly here where you have a zone:

```
CDTPullReplication *copy = [[CDTPullReplication allocWithZone:zone] initWithSource:self.source
                                                                            target:self.target];
```