Abstract AckedClusterStateUpdateTask to remove boiler plate code

this seems like a common pattern and we should abstract it to remove unnecessary code and improve readability.