code: @InterfaceStability.Experimental
      @InterfaceAudience.Public
      public Single<JsonDocument> getFirstPrimaryOrReplica(final String id,
          final Bucket bucket, final long timeout) {
          return getFirstPrimaryOrReplica(id, bucket, timeout, timeout);
      }
docs: Asynchronously fetch the document from the primary and if that operations fails try
  all the replicas and return the first document that comes back from them (with a custom
  timeout value applied to both primary and replica).
  
  @param id the document ID to fetch.
  @param bucket the bucket to use when fetching the doc.
  @param timeout the timeout to use for both primary and replica fetches (separately)
  @return an {@link Single} with either 0 or 1 {@link JsonDocument}.