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
Match query with operator and, cutoff_frequency and stacked tokens

If the match query with cutoff_frequency encounters stacked tokens,
like synonyms in the same position, it returns a boolean query instead
of a common terms query.  However, if the original operator was set
to "and", it was ignoring that and resetting the operator to "or".

In fact, if operator is "and" then there is little benefit in using
a common terms query as a must query is already
executed efficiently.