Added version support to mget and get apis, that only will perform the get operation if the version of the document to be fetched matches with the provided version.

Both get and mget apis now support the following additional parameters: `version` and `version_type`.

Closes #3404
Rewrote the percolate existing doc api.
The percolate existing doc feature now reuses the get request instead of having a separate request body.
Relates to #3380
Moved node level classes classes out of the index.percolator package into toplevel percolator package.
Lowered the default size of the percolate thread pool
Made a clear distinction in the rest api between percolating a provided document and percolating an existing document. The latter is now a separate api.
warmer test to use 0 replicas
they are meaningless in the context of the test, should stabilize it
Ported an 0.90 branch excplicit test for dynamic update of gc_delete setting for RobinEngine.
This issue is already solved in master.

See #3396
Solved test timing issue and removed meaningless test
Added source fetching and filtering parameters to search, get, multi-get, get-source and explain requests

Closes #3301
make sure we wrap a potential failure in sending master state change in a catch
Improved how aliases are handled in the cluster state.

The following changes improved alias creation:
* Moved away from ImmutableMap to JCF's UnmodifiableMap. The ImmutableMap always made a copy, whereas the UnmodifiableMap just wraps the target map.
* Reducing the number of maps being created during the creation of MetaData and IndexMetadata.
* Changed IndexAliasesService's aliases from a copy on write ImmutableMap to ConcurrentMap.

Closes #3410
Use Analyzer.tokenStream(fieldName, text) instead of Analyzer.tokenStream(fieldName, new StringReader(text)).

Lucene 4.4 introduced the tokenStream(String fieldName, String text) helper
method which nicely reuses the string reader. Whenever analyzing Strings, we
should use this method instead of using the Reader method with a
(Fast)StringReader.

Closes #3409
ElasticsearchAssertions.assertHitCount variants now report shard failure upon fail.

Cleaned up a UpdateNumberOfReplicasTests a bit.
removed a left over  assert made redundant by last commit
Delete API ack to wait also for actual deletion of shards from disk
closes #3413
auto_expand_replicas causing very large amount of cluster state changes when a node joins or leaves the cluster

Closes #3399
don't call the refresh mapping listener callback twice
though not harmful, results in an annoying transport service log
Forbid usage of StringReader in favor of FastStringReader.

StringReader is synchronized although input streams should always be consumed
by a single thread at a time. FastStringReader on the other hand is completely
thread unsafe.

Closes #3411
process deleted index events on a node even if it has no local FS
this will not happen now, but in the future, if data nodes will only be in memory (including translog and such), then we need to fire the deleted events
Improved test

- checking routing table taken from same (up-to-date) cluster state
- added @Slow annotation
- forced cluster reroute when needed
- changed order of assertions so that if it fails again it's easier to understand why