anchor.diff:  === Performing requests
   
   Once the `RestClient` has been created, requests can be sent by calling one of
  -the available `performRequest` method variants. The ones that return the
  -`Response` are executed synchronously, meaning that the client will block and
  -wait for a response to be returned. The `performRequest` variants that return
  -`void` accept a `ResponseListener` as an argument and are executed
  -asynchronously. The provided listener will be notified upon completion or
  -failure. The following are the arguments accepted by the different
  -`performRequest` methods:
  +the available `performRequest` or `performRequestAsync` method variants.
  +The `performRequest` methods are synchronous and they return the `Response`
  +directly, meaning that the client will block and wait for a response to be returned.
  +The `performRequestAsync` variants, which return `void` and accept an extra
  +`ResponseListener` as an argument, are executed asynchronously. The provided
  +listener will be notified upon completion or failure.
  +
  +[source,java]
  +--------------------------------------------------
  +// Synchronous variants
  +Response performRequest(String method, String endpoint,
  +                        Header... headers)
  +    throws IOException;
  +
  +Response performRequest(String method, String endpoint,
  +                        Map<String, String> params, Header... headers)
  +    throws IOException;
  +
  +Response performRequest(String method, String endpoint,
  +                        Map<String, String> params,
  +                        HttpEntity entity,
  +                        Header... headers)
  +    throws IOException;
  +
  +Response performRequest(String method, String endpoint,
  +                        Map<String, String> params,
  +                        HttpEntity entity,
  +                        HttpAsyncResponseConsumer<HttpResponse> responseConsumer,
  +                        Header... headers)
  +    throws IOException;
  +
  +// Asynchronous variants
  +void performRequestAsync(String method, String endpoint,
  +                         ResponseListener responseListener,
  +                         Header... headers);
  +
  +void performRequestAsync(String method, String endpoint,
  +                         Map<String, String> params,
  +                         ResponseListener responseListener,
  +                         Header... headers);
  +
  +void performRequestAsync(String method, String endpoint,
  +                         Map<String, String> params,
  +                         HttpEntity entity,
  +                         ResponseListener responseListener,
  +                         Header... headers);
  +
  +void performRequestAsync(String method, String endpoint,
  +                         Map<String, String> params,
  +                         HttpEntity entity,
  +                         ResponseListener responseListener,
  +                         HttpAsyncResponseConsumer<HttpResponse> responseConsumer,
  +                         Header... headers);
  +--------------------------------------------------
  +
  +==== Request Arguments
  +
  +The following are the arguments accepted by the different methods:
   
   `method`:: the http method or verb
  -`endpoint`:: the request path, which identifies the Elasticsearch api to
  +`endpoint`:: the request path, which identifies the Elasticsearch API to
   call (e.g. `/_cluster/health`)
   `params`:: the optional parameters to be sent as querystring parameters
   `entity`:: the optional request body enclosed in an
  
positive.code:  object
  
  When performing a request, an exception is thrown (or received as an argument
   in `ResponseListener#onSucces(Exception)` in the following scenarios:
  
  `IOException`:: communication problem (e.g. SocketTimeoutException etc.)
  `ResponseException`:: a response was returned, but its status code indicated
  an error (either `4xx` or `5xx`). A `ResponseException` originates from a valid
  http response, hence it exposes its corresponding `Response` object which gives
  access to the returned response.
  
  
  === Example requests
  
negative.code: int numRequests = 10;
  final CountDownLatch latch = new CountDownLatch(numRequests);
  for (int i = 0; i < numRequests; i++) {
      restClient.performRequestAsync(
          "PUT",
          "/twitter/tweet/" + i,
          Collections.<String, String>emptyMap(),
  