Add Groovy as a scripting language, add sandboxing for Groovy

Sandboxes the groovy scripting language with multiple configurable
whitelists:

`script.groovy.sandbox.receiver_whitelist`: comma-separated list of string
classes for objects that may have methods invoked.
`script.groovy.sandbox.package_whitelist`: comma-separated list of
packages under which new objects may be constructed.
`script.groovy.sandbox.class_whitelist` comma-separated list of classes
that are allowed to be constructed.

As well as a method blacklist:

`script.groovy.sandbox.method_blacklist`: comma-separated list of
methods that are never allowed to be invoked, regardless of target
object.

The sandbox can be entirely disabled by setting:

`script.groovy.sandbox.enabled: false`
Re-shade MVEL as a dependency
Docs: Updated cluster health docs
Refactored AckedClusterStateUpdateTask & co. to remove code repetitions in subclasses

Made AckedClusterStateUpdateTask an abstract class instead of an interface, which contains the common methods.
Also introduced the AckedRequest interface to mark both AcknowledgedRequest & ClusterStateUpdateRequest so that the different ways of updating the cluster state (with or without a MetaData*Service) can share the same code.
Removed ClusterStateUpdateListener as we can just use its base class ActionListener instead.

Closes #6559
Fixed NPE in recovery api by serializing the recovery type in StartRecoveryRequest.

Closes #6190
[TEST] Verify that all pending tasks are rely executed on *all* nodes.
[TEST] Move the waiting for pending tasks to helper methods and let the percolator and update mapping test use these helper methods.
Fix optional default script loading
Groovy is optional as a dependency in the classpath, make sure we properly detect when its not at the right time to disable it
closes #6582
[TEST] fix a NPE in verifyThreadNames which may happen if thread finishes during sampling
[Test] Use no failures, shard might not have been initialize yet
Docs: Updated the explanation about memory usage with parent/child
Docs: Updated stop token filter docs
[Test] testGetFields_complexField should wait for a green cluster

Waiting for ongoing recoveries was not good enough as it can run before the  master finishing processing the started events of primary shards, causing the recovery response to be erroneously empty
Docs: Added IDs to the highlighters for linking
[TEST] Improved logging for replica operation failures
Internal: Made base64 decode parsing to detect more errors

The base64 did not completely check, if there were other characters
after the equals `=` sign. This PR adds some small additional checks.

Closes #6334
[LOG] better log message
Add sandboxing for GString-based method invocation
Switch to Groovy as the default scripting language

This is a breaking change to move from MVEL -> Groovy
[TEST] Add assertion failure messages