Further hardening of ReplicaRead.

This changeset hardens the implementation of ReplicaRead further
by applying the following changes:

 - Make sure the completedFuture is not overriden by later calls.
 - The "cancel" iterations on the monitoredFutures is synched as
   advised by Collections#synchronizedList.
 - Make sure that replica reads are only "fanned out" to nodes that
   are actually configured as a replica at the moment. For that
   reason, a new method is added to the VBucketNodeLocator to return
   a list of servable nodes for this specific key.
 - Along the lines of the previous point, make sure that an additional
   request to the proper active master is only sent when it is actually
   reachable (not -1 in the vbucket map).

Change-Id: I6568e1c1fd5d779acf3fd1e52ed2d88b46a1a8b7
Reviewed-on: http://review.couchbase.org/30009
Reviewed-by: Matt Ingenthron <matt@couchbase.com>
Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>