Finalize acknowledgements work, move over all the api, strenghten ack api and remove boiler plate code

All the apis that modify the cluster state and already supported acknowledgement but used the old mechanism with custom notifications have been migrated to the new generic ack mechanism introduced in #3786 : indices aliases, open/close index, delete index, put mapping, create index.

A MetaDataService that actually submits the cluster state update task has been introduced in cluster reroute, cluster update settings, put/delete warmer (similar to what other apis already do) rather than making changes directly in the `Transport*Action`. The `AcknowledgedRequest` gets converted to an internal `ClusterStateUpdateRequest` (or subclass) that is used for the cluster state update which returns a `ClusterStateUpdateResponse` (or subclass), that needs to be converted back to `AcknowledgedResponse`.

Introduced a `TransportClusterStateUpdateAction` base class that allows to share code and avoid repeating boiler plate code in each action. Made `AckedClusterStateUpdateTask` an abstract class that contains the implementation for the methods that are always the same all over the place (similar to #4001). Unified the rest layer too to parse the `timeout` and `master_timeout` parameters in a single place.

The `TransportDeleteIndexAction` is the only one that has not been moved over to `TransportClusterStateUpdateAction` as it needs some rework: it currently performs multiple cluster state updates, one per index, and there's a metadata lock involved per each index.

Also, I wonder if we should go ahead and add ack support in put/delete index template as they both already support all the needed parameters, which are currently pointless (timeout ignored, acknowledged always true).