27990 Add Filtered Pull Replication


#  Add "PullReplication" and "PushReplication" to manage information 
about a pull or push replication. 
# Add "Replication.Filter" class; "PullReplication" includes a member 
variable "Filter" so allow client to specify a "Filter" for "PullReplication".
Here is how to create a replication for filtered pull replication:

```java
PullReplication pullReplication = new PullReplication();
pullReplication.source = "http://blah/blog/blag";;
pullReplication.target = datastore;
pullReplication.username = "username";
pullReplication.password = "password";
pullReplication.filter = new Replication.Filter("filterFunctionName", ImmutableMap.of("key", "value"))

Replicator replication = factory.oneway(pullReplication);  
```

# Constructors for "BasicPull/PushStrategy" has been updated to take
"PullReplication" and "PushReplication" as parameters.
This changes makes it a little harder to inject dependency to
BasicPull/PushStrategy. Right now, those fields are marked as package
private so test classes can access them directly.