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.