[STATE] Observe cluster state on health request

Today we use busy waiting and sampling when we execute HealthReqeusts
on the master. This is tricky sicne we might sample a not yet fully applied
cluster state and make a decsions base on the partial cluster state. This can
lead to ugly problems since requests might be routed to nodes where shards are
already marked as relocated but on the actual cluster state they are still started.
Yet, this window is very small usually it can lead to ugly test failures.

This commit moves the health request over to a listener pattern that gets the actual
applied cluster state.
I'm concerned about the change in performance of inserts (they now do putIfAbsent). This one is used by waiting incoming indexing request. Agreed we should change it to a better data structure but we should keep it as it as an CopyOnWriteArrayList until then (we always create a listener per request anyway)