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.
Be more diligent about ThreadPools having names

Add a name parameter to what was the empty ThreadPool constructor. Assert if the the ThreadPool's setting doesn't contain a name.
lightweight minimum master node recovery
don't perform full recovery when minimum master nodes are not met, keep the state around and use it once elected as master
make no master lock an instance var so it can be configured
add rejoin on master gone flag, defaults to false
defaults to false since there is still work left to properly make it work
Make noMasterBlock configurable and added simple test that shows reads do execute (partially) when m_m_n isn't met
Enable `discovery.zen.rejoin_on_master_gone` setting in DiscoveryWithNetworkFailuresTests only.
Changed the default for the 'rejoin_on_master_gone' option from false to true in zen discovery.
Added AwaitFix for the FullRollingRestartTests.
If available newly elected master node should take over previous known nodes.
Fixed compile error
Do not start a recovery process if the primary shard is currently allocated on a node which is not part of the cluster state

If a source node disconnect during recover, the target node will respond by canceling the recovery. Typically the master will respond by removing the disconnected node from the cluster state, promoting another shard to become primary. This is sent it to all nodes and the target node will start recovering from the new primary. However, if the drop of a node caused the node count to go bellow min_master_node, the master will step down and will not promote shard immediately. When a new master is elected we may publish a new cluster state (who's point is to notify of a new master) which is not yet updated. This caused the node to start a recovery to a non existent node. Before we aborted the recovery without cleaning up the shard, causing subsequent correct cluster states to be ignored. We should not start the recovery process but wait for another cluster state to come in.
RoutingService background reroute task should check if node is still master when its run

It may be that between the moment the task was added to the queue the current node stepped down from being master (due to minimum_master_nodes settings).
Eagerly clean the routing table of shards that exist on nodes that are not in the latestDiscoNodes list.

Only the previous master node has been removed, so only shards allocated to that node will get failed.
This would have happened anyhow on later on when AllocationService#reroute is invoked (for example when a cluster setting changes or another cluster event),
but by cleaning the routing table pro-actively, the stale routing table is fixed sooner and therefor the shards
that are not accessible anyhow (because the node these shards were on has left the cluster) will get re-assigned sooner.
Use just AllocationService#reroute to eagerly clean the routing table of nodes that don't exist instead of using AllocationService#applyFailedShards directly.
Updated to use ClusterBlocks new constructor signature

Introduced with: 11a3201a092ed6c5d31516ae4b30dbb618ba348c