MB-9343 UPR replication implementation

this code enables replication via UPR protocol. to test
it you need first to rebalance bucket via tap and then
change its replication type in config from tap to upr
and restart server.

- each bucket now has config key repl_type with possible
  values: tap, upr, {upr, [tap partitions]}
  default value: tap

- tap: all partitions are replicated via tap
- upr: all partitions are replicated via upr
- {upr, [tap partitions]}: all partitions are replicated
  via upr except [tap partitions] which are replicated
  via tap

- replication_manager is responsible for routing the
  replications between tap and upr depending on repl_type
  of the bucket

- code that upgrades tap bucket to upr will be submitted
  in the later commit

- upr_proxy, upr_producer_conn, upr_consumer_conn
  implement 2 way proxy that establishes sockets
  to the producer and consumer memcashed's and dispatches
  packets in both directions according to UPR protocol spec

- upr_replicator is higher level server that implements
  blocking setup_replication call on top of the upr proxy
  that incorporates multiple non-blocking add and close stream
  calls

- upr_sup is a supervisor for upr_replicator's that also
  implements a front end interface for them

Change-Id: Ib7252c1baaa85bd4d877b8acbd5f7ac992ffa5db
Reviewed-on: http://review.couchbase.org/32536
Tested-by: Artem Stemkovski <artem@couchbase.com>
Reviewed-by: Aliaksey Artamonau <aliaksiej.artamonau@gmail.com>