Fix replicator ID uniqueness:

- Source and Destination are inputs to the hash
- Filter and Query string are inputs to the hash for pull
  replications, if set

This implementation of replicator IDs is closer in spirit to the CDTDatastore one. Note that we don't need to include the 'push' flag as the input to the hash because source and destination are given, with their own keys.

It'd be good to see a couple of tests that check for the actual values -- this makes sure we don't accidentally change them in future. For both push and pull with source/target only, and for pull with filter.