27990 Filtered Pull Replication (step one)

- Add `Replication`, `PullReplication` and `PushReplication`.
The class is called `Replication`, not `ReplicationConfig` because 
there is already a classes `Pull/PushConfiguration`. 
The `Pull/PushConfiguration` is not exposed, and we need to 
give them a better name. (Another PR?)

- Change `ReplicatorFactory` to use `Pull/PushReplication`.
`Replication` has fields for: username/password. Therefore
developer should not include "username:password" in the uri
input when call `ReplicatorFactory.oneway(Replication)`

- Change `BasicPull/PushStrategy` constructors
Now we have `PullReplication/PushReplication` manages all the
information to create PullStrategy. `BasicPull/PushStrategy`'s
constructors are changed to take `Pull/PushReplication` as parameters,
then lots of implementation details can be hidden from high level 
class like `Replicator`.
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.