Sensors chained for service up

This implements the use of service not-up indicators and problem indicators, as discussed on the ML.

See `service-state.md` for docs and `ServiceStateLogicTest` for detailed explanation and checking of subtleties.

The material differences in behaviour are surprisingly few (though in the PR you will notice a lot of changes to tests; most test changes are uninteresting!).  The main functional differences, in addition to dynamic updating, are:

* this removes a lot of ad hoc service-up computations; some quorum up logic e.g. for mongo,  has changed, but this was all quite hokey, we should replace this with quorum keys in cluster
* this tweaks a recent workaround where AbstractEntity.add{Enricher,Policy} detects a duplicate, we now take the more recent one rather than the older one; this allows us to replace them in a principled fashion when using unique tags.
* ServiceFailureDetector is now very different, and extends ServiceStateLogic (which previously is somewhat duplicated in the very occasional places it was used); if you were relying on this, or your apps start acting oddly, please let me know!


we don't currently -- this assumes that a failure during start does not necessarily mean the application isn't running.  it's marked TODO while we better figure out the right logic.

in concrete terms most failures are if a child fails to start.  the child is then on fire and so is the app.  if restarting the child fixes it then the app will also, correctly, be fixed.  however if the app has some other startup problem (eg locally) then it might not report the problem and incorrectly advertise health.

let's continue to think on this, not try to solve all such issues in this PR