refactor Enrichers.builder() types to give correct generics for published sensor
add support for suppressing duplicates in enrichers, defaulting false for most, but true for UpdatingMap; and in Enrichers.builder() use better superclasses to support tags, uniqueTags
simple cleaned up illustration of service_up from not_up computation
a bunch more service-up checks (WIP)
fix enricher type test with suppress duplicates
rename WhenFunctions class to IfFunctions, and tidies/cleanups there and in enrichers
add SERVICE_PROBLEMS and enrichers in ServiceStateLogic to compute state from that.
add enrichers to populate PROBLEMS and NOT_UP_INDICATORS from children and members: this removes a lot of ad hoc service-up computations; some quorum up logic e.g. for mongo, have changed, but in those cases the previous logic was quite hokey in any case. (to properly support QUORUM_SIZE we should have a key, or use the UP_QUORUM_CHECK config).
also tweak the recent workaround when 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.
some notes on tidying the REST API
default children/members enrichers for service_up and service_problems ignores entities that report null as well as those that don't report; this can be overridden with IGNORE_{NULL,TRANSITIONING} config keys.
and the load balancing policy defaults not to blocking service up simply because children/members are not present. misc other tidies around policies.
rewrite of ServiceFailureDetector -- part of what it did before is now done by ServiceStateLogic of course,
so now this extends that, and provides options for emitting notifications of ENTITY_FAILED, ENTITY_RECOVERED, as well as suppressing ON_FIRE
use initApp for apps to ensure enrichers get added, fixing tests and other misc tidies
fix failing test on service going on_fire not aborting dependent configuration
fix all tests and related entities to get service lifecycle, including REST app creation attaching all interfaces (previously it did not get "startable" so entities did not start)
make consistent `Mutable{List,Set,Map}.as{Immutable,Unmodifiable,UnmodifiableCopy}()` methods, and more forgiving if null is present, deprecatign the inconsistent and break-prone `toImmutable()`
write comprehensive tests for ServiceStateLogic, and tidy some of the semantics and usages elsewhere
convert SERVICE_STATE to _ACTUAL or _EXPECTED in many more places, and force recompute of _ACTUAL whenever _EXPECTED is changed
docs for service state