Introduce a new ImmutableOpenMap
this map is a "true" immutable map, encapsulating an open impl, and has a builder that allows it to be built easily.
the builder has the optimization of using clone if its being built based on an existing immutable map.
Fixed ack behaviour when no ack is expected from any node or timeout is set to 0

We now return acknowledged true when no wait is needed (mustAck always returns false). We do wait for the master node to complete its actions though. Previously it would try to timeout and hang due to a CountDown#fastForward call when the internal counter is set to 0

We now return acknowledged false without starting the timeout thread when the timeout is set 0, as starting the wait and immediately stopping the thread seems pointless.

Added coverage for ack in ClusterServiceTests
Refactored indices aliases api to make use of the new recently introduced generic ack mechanism
Refactored open/close index api to make use of the new recently introduced generic ack mechanism
Refactored delete index api to make use of the new recently introduced generic ack mechanism

Side note: the double notification from each node (one after deleting from metadata, one after deleting from file system) that was in place is not needed anymore, as each node returns the ack in the clusterStateProcessed, which gets called after all the listeners (one of which actually deletes from file system)
Refactored put mapping api to make use of the new recently introduced generic ack mechanism
Refactored create index api to make use of the new recently introduced generic ack mechanism
Introduced metadata service for cluster reroute, cluster update settings, put warmer and delete warmer

Helps consistency between the different apis that modify the cluster state and support acknowledgements
Strengthen the acknowledgement api and cluster state update operations

Introduced TransportClusterStateUpdateAction base class that extends TransportMasterNodeOperationAction to remove boiler plate code from all subclasses. Introduced abstract ClusterStateUpdateActionListener class that implements ClusterStateUpdateListener.

Made AckedClusterStateUpdateTask an abstract class and added its default subcass that is used in most of the cases (AckedDefaultStateUpdate) unless a specific ClusterStateUpdateResponse subclass (that holds more than the only acknowledged flag) is needed. This allowed to remove boiler plate code from all MetaDataServices (onResponse, onTimeout, ackTimeout, masterNodeTimeout, onFailure and so on)

Forced also implementing toString on all ClusterStateUpdateRequest, used for logging (debug level on the action package) in case something goes wrong updating the cluster state. Previously only some of the apis did this.

The only api that hasn't been fully migrated yet is the delete index api (TransportDeleteIndexAction doesn't subclass yet TransportClusterStateUpdateAction) as it supports multiple indices but submits a different cluster state update per index. We might wanto to keep it like this for now as it also locks the index during the delete operation.
Moved ClusterStateUpdate(Request|Response|Listener|ActionListener) to action.support.master package
Unified cluster state update operations for what concerns the rest layer

Added common method that read the timeout and master_timeout parameter from the rest request and sets them to the AcknowledgedRequest

Made sure that the rest layer doesn't have its own default values for timeout and master_timeout (used the ones already set in the request class)

Moved Put Alias and Delete Alias over to the new AcknowledgedRestListener

Made ok and acknowledged XContentString constants

Fixed unchecked cast in rest put/delete warmer
Moved put/delete index template to new cluster state update structure

As a side note both api read the timeout parameter and return the acknowledged flag, although they don't support acknowledgements. The timeout parameter is ignored and the acknowledged flag is always true.
Kept that behaviour for now. The difference with the other api is the type of ClusterStateUpdateTask submitted, which is TimeoutClusterStateUpdateTask instead of AckedClusterStateUpdateTask. The rest of the code could be migrated anyway to the new structure.