* Major refactoring to remove the need to use special
Cluster instance for testing. Use default Cluster
extension instead. Most of it is trivial changes.
* Used failure-detector.implementation-class from config
to swap to Puppet
* Removed FailureDetectorStrategy, since it doesn't add any value
* Added Cluster.joinSeedNodes to be able to test seedNodes when Addresses
are unknown before startup time.
* Removed ClusterEnvironment that was passed around among the actors,
instead they use the ordinary Cluster extension.
* Overall much cleaner design
* Defined the domain events in ClusterEvent.scala file
* Produce events from diff and publish publish to event bus
from separate actor, ClusterDomainEventPublisher
* Adjustments of tests
* Gossip is not exposed in user api
* Better and more events
* Snapshot event sent to new subscriber
* Updated tests
* Periodic publish only for internal stats
* Implemented without ScatterGatherFirstCompletedRouter, since
that is more straightforward and might cause less confusion
* Added more description of what it does
* Can't reproduce with the actor based Cluster, it was easy
to reproduce before.
* If it still is a problem it will be detected by the runtime
assert. It will show up as:
IllegalArgumentException: Nodes not part of cluster have marked the Gossip as seen