Add Replication, Pull/PushReplication

Also change ReplicatorFactory to use Pull/PushReplication
Add username/password to Replication

Therefore developer should not include "username:password" in the uri
input when call ReplicatorFactory.oneway(Replication)
Add Filter to PullReplication.

And some tests
Change BasicPull/PushStrategy constructors

Now we have PullReplication/PushReplication manages all the esential
informaiton to create PullStrategy. BasicPull/PushStrategy's
constructors are changed to take Pull/PushReplication as parameters,
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.