Fixed test cluster scope to be able to run it multiple times if needed
Added ack call when the cluster state has not changed

The missing call could cause a cluster state update to hang in case there is no change no apply
Added support for acknowledgement in update index settings api

Added support for serialization based on version to AcknowledgedResponse. Useful in api that don't support yet the acknowledged flag in the response.
Moved also ack warmer tests to more specific AckTests class

Close #3983
Added support for node acknowledgements in delete mapping api

Closes #3984
Added support for acknowledgements to cluster reroute api

Closes #3985
Added support for acknowledgements to update cluster settings api

As a side note, the internal reroute call is now part of the ack mechanism. That means that if the response contains acknowledged flag, the internal reroute that was eventually issued was acknowledged too. Also, even if the request is not acknowledged, the reroute is issued before returning, which means that there is no need to manually call reroute afterwards to make sure the new settings are immediately applied.

Closes #3995
Improving test stability for CompletionTests

Randomized testing caught an issue showing that the test should
flush after indexing a document, as always the same document is
indexed.
[DOCS] Extending setup as a service documentation

* Tell people to use ES_JAVA_OPTS for es.node.name or similar parameters
* Showing a simple way to install Oracle JDK on ubuntu/debian

Closes #3999
Added getters for fs.path, fs.mount and fs.dev in node stats api

Closes #4004
Wrote first draft for pre-selecting terms in TermVector API
Make sure that selected terms that are not on doc are returned with freq 0

If specific terms are requested, they should be returned with freq 0 if they do not
appear in the document. To do this efficiently, we compute a sorted list of
terms and then intersect this list with the terms in the documents when writing
the terms.

This commit changes an inconsistency of uri parameter handling:
Previously, when selected fields were given in the uri parameters,
these fields were added to the list of selected terms. This does not make
sense since it is not the other way round. Now, uri parameters are always
overwritten by the parameters given in the body.

closes #3924 for single term vector request
[DOC] add doc for terms param
Make parsing of uri and body parameters consistent with single term vector api

uri parameters were not all parsed for the multi term vector request. This commit
makes sure that all parameters are parsed and used when creating the requests for the
multi term vector request.

In order to simplify both code and json request, the request structure now allows
two ways to use multi term vectors:

1. Give all parameters for each document requested in the docs array like this:

```
{
   "docs": [
      {
         "_index": "testidx",
         "_type": "test",
         "_id": "2",
         "terms": [
            "fox"
         ],
         "term_statistics": true
      },
      {
         "_index": "testidx",
         "_type": "test",
         "_id": "1",
         "terms": [
            "quick",
            "brown"
         ],
         "term_statistics": false
      }
   ]
}
```

2. Define a list of ids and give parameters in a separate parameters object like this:

```
{
   "ids": [
      "1",
      "2"
   ],
   "parameters": {
      "_index": "testidx",
      "_type": "test",
      "terms": [
         "brown"
      ]
   }
}
```

uri parameters are global parameters that are set for both cases. They are overwritten
by parameter definitions in the body.

closes #3924 for multi term vector api
[DOC] add doc for multi term vector api

closes #3998