[Cluster] Refactored ClusterStateUpdateTask protection against execution on a non master

Previous implementation used a marker interface and had no explicit failure call back for the case update task was run on a non master (i.e., the master stepped down after it was submitted). That lead to a couple of instance of checks.

This approach moves ClusterStateUpdateTask from an interface to an abstract class, which allows adding a flag to indicate whether it should only run on master nodes (defaults to true). It also adds an explicit onNoLongerMaster call back to allow different error handling for that case. This also removed the need for the  NoLongerMaster.

Note: this pr is agains the feature/improve_zen branch , as part of the review process of #7493
Yeah - I debated this and decided to opt for clarity at the price of verbosity - this things are complex enough. `isMasterOnly` or `masterOnly` raises to me the question of what does it mean for an updateTask. I'm fine with changing it if other people feel that `masterOnly` is more intuitive.