Dont execute suggest before parsing the full request

The current implementation of parsing suggestions executed inside of the
the pull parser - which resulted in being reliable of the order of the
elements in the request. This fix changes the behaviour to parse the
relevant parts of the request first and then execute all the suggestions
afterwards, so we can be sure that every information has been extracted
from the request before execution.

Closes #3247
Moving forbidden-api checks to compile phase instead of test phase (fail fast)
Updated elasticsearch.yml file for recovery throttling
Fixes the issue that the `parent` option was ignored for delete requests.

The `parent` option was ignored in the delete api (rest only) and for delete actions in the bulk api.
This bug occurred in the case that the _parent field is enabled, and only the parent option was used. This resulted in a situation that documents are deleted even if the specified parent value is incorrect.

Closes #3257
Fix misspelling.
Ignore live docs when loading field data, the ID cache and filter caches.

Relying on deleted documents when loading field data is dangerous because a
field data instance might be loaded for a given generation of a segment and
then loaded from the cache by an older generation of the same segment which
has fewer deleted documents. This could, for example, lead to under-estimated
facet counts. The same issue applies to the ID cache and filter caches.

Close #3224
Fixes issue that in some cases the doc_as_upsert option is ignored.
Closes #3265
Changes validation error message
Clean up update tests
Stop aborting of multiget requests in case of missing index

The MultiGet API stops with a IndexMissingException, if only one of all
requests tries to access a non existing index. This patch creates a
failure for this item without failing the whole request.

Closes #3267
Supports mget fields parameter given as string.

Closes 3270
Parent was ignored in exists request

The routing was always set to null right after the parent was set.

Closes #3276
(Java) Using primitive arrays instead of Object with map/builder
also simplify and consolidate the builder generic value write handling
fixes #3279
Support for parent in multi get request

When specifying the docs to be returned in a multi get request, a parent
field could not be specified, so that some docs seemingly did not exist,
even though they did.

This fix behaves like the normal GetRequest and simply overwrites the
routing value if it has not yet been set.

Also a test for routing with mget has been added.

Closes #3274
_source could be loaded twice from disk

 if only partial_fields was specified or fields needed to be extracted from _source the source it self isn't needed to be returned.
simplify builder API with simpler get()
also simplify some common API calls, for example, a simplified format in Java API for providing mapping
Start cat api with shards endpoint.
Add /_cat/master.
Don't trim() table since we need the newline most of the time.
Add relocation info to _cat/shards.