Cli: parsing multiple times throws `AlreadySelectedException`

This issue has been fixed in commons-cli:1.3 project which sadly has not been released yet.
See https://issues.apache.org/jira/browse/CLI-183

This patch builds another list of options with no selected groups by default.

When commons-cli:1.3 will be released, we need to remove this patch.

Closes #7282.
Aggregations: Add `children` bucket aggregator that is able to map buckets between parent types and child types using the already builtin parent/child support.

Closes #6936
Internal: changed index templates api category from indices to cluster
Internal: get request while percolating existing documents to keep around headers and context of the original percolate request

Closes #7333
Core: DistributorDirectory shouldn't search for directory when reading existing file

This was causing too much work e.g. when pulling node stats or when
opening a new reader, because the least_used distributor would
unnecessarily check free disk space on all path.data entires every
time we try to open a file for reading or check its length.

Closes #7306

Closes #7323
Aggregations: Merge LongTermsAggregator and DoubleTermsAggregator.

These two aggregators basically do exactly the same thing, they just interpret
bytes differently. This refactoring found an (unreleased) bug in the long terms
aggregator which didn't work correctly with duplicate values.

Close #7279
[TEST] Added more assertions
Internal: made it possible to disable the main transport handler in TransportShardSingleOperationAction

TransportShardSingleOperationAction is currently subclassed by different transport actions. Some of them are internal only, meaning that their execution will take place only in the same node where their parent execution took place. That means that their main transport handler doesn't need to be registered, the only transport handler that's needed is the shard level one.

Added `isSubAction` method (defaults to false) to the parent class that tells whether the action is a main one or a subaction, used to decide whether we need to register the main transport handler.

Closes #7285
Internal: auto create index to keep around headers and context of the request that caused it

Closes #7331
Transport: Refactor guice startup

* Removed & refactored unused module code
* Allowed to set transports programmatically
* Allow to set the source of the changed transport

Note: The current implementation breaks BWC as you need to specify a concrete
transport now instead of a module if you want to use a different
Transport or HttpServerTransport

Closes #7289
Upgrade to Netty 3.9.3.Final
closes #7328
Upgrade to Jackson Smile 2.4.1.1
This fixes issue 18 in Smile (https://github.com/FasterXML/jackson-dataformat-smile/issues/18)

closes #7327
Fix NPE in SnapshotsService on node shutdown

Fixes #6506
Snapshot checksum verification

Adds automatic verification of all files that are being snapshotted. Closes #5593
Test: Prevent use of transport client when testing changed transports

This makes sure, that the transport client is not used, as it would use
a different than the configured local transport mechanism in this test.
[TEST] UnicastBackwardsCompatibilityTest should not copy internal node settings to external nodes

Recent test failures triggered by #7289 were caused by this, simply because internal node settings (transport type key) that are not supported by the external older nodes were copied to them by mistake.
Internal: adjusted internal requests visibility from public to package private
Improve recovery / snapshot restoring file identity handling

This commit changes the way how files are selected for retransmission
on recovery / restore. Today this happens on a per-file basis where the
rather weak checksum and the file length in bytes is compared to check if
a file is identical. This is prone to fail in the case of a checksum collision
which can happen under certain circumstances.
The changes in this commit move the identity comparsion to a per-commit / per-segment
level where files are only treated as identical iff all the other files in the
commit / segment are the same. This "all or nothing" strategy is reducing the chance for
a collision dramatically since we also use a strong hash to identify commits / segments
based on the content of the ".si" / "segments.N" file.