Add `explain` flag support to the reroute API

By specifying the `explain` flag, an explanation for the reason a
command can or cannot be executed is returned. No allocation commands
are actually performed.

Returns a response similar to:

{
  "state": {...cluster state...},
  "acknowledged": true,
  "explanations" : [ {
    "command" : "cancel",
      "parameters" : {
        "index" : "decide",
        "shard" : 0,
        "node" : "IvpoKRdtRiGrQ_WKtt4_4w",
        "allow_primary" : false
      },
      "decisions" : [ {
        "decider" : "cancel_allocation_command",
        "decision" : "YES",
        "explanation" : "..."
        } ]
     }, {
      "command" : "move",
      "parameters" : {
        "index" : "decide",
        "shard" : 0,
        "from_node" : "IvpoKRdtRiGrQ_WKtt4_4w",
        "to_node" : "IvpoKRdtRiGrQ_WKtt4_4w"
       },
       "decisions" : [ {
         "decider" : "same_shard",
         "decision" : "NO",
         "explanation" : "shard cannot be allocated on same node [IvpoKRdtRiGrQ_WKtt4_4w] it already exists on"
       },
       etc
       ]
  }]
}

also removes AllocationExplanation from cluster state

Closes #2483
Closes #5169
Remove trace logging from testBreakerWithRandomExceptions()
Improve error reporting on breaker stats assertion
Update Eclipse configuration to Java 1.7.
Add assertion to not forget to replace reflection with the new FilterAtomicReader.unwrap.
Move ensureEstimatedStats() after index wiping to ensure everything is cleaned up once the index is removed
Added more trace and debug logging
[TEST] more assertAcked in SharedClusterShapshotRestoreTests
Add plugin class space isolation

Each plugin is now loaded in its own classloader to prevent class
conflicts when loading different versions of the same library. It
 is enabled by default and is configurable through
 `plugins.isolation` settings .Additionally, each plugin can
change its own isolation through the `isolation` property in
`es-plugin.properties`- if not specified, the global setting in
ES applies.

Closes #5261
[TEST] Add version and master_node parameter to _cluster/state
[TEST] Dynamically extract node ID for test
fix failing IsolatedPluginTests (change numNodes to 0)

(cherry picked from commit f26a369a78ade032df44fcf331f378644f74b9ea)
[DOCS] Fixed added[] tag version number
make test assertions relative in IsolatedPluginTests

relates to #5621
[TEST] skip explain reroute REST test until param substitution is implemented
Clarify range aggregations
Remove same-thread checks when recycling (see #5254).
Prevent page-tracking checks from spreading across tests.
Reuse pages more agressively in BigArrays.

Pages are now going to be reused when the size of the array is greater than
${page_size}/2 (as opposed to ${page_size} currently).

Close #5299
fix incorrect array search in test (by sorting it first)

relates to #5621