Add "Replication", "PullReplication" and "PushReplication"

Also 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, 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. Not
ideal, need to figure out a more consistent way.