Introduces snapshotting of cluster contexts.

o All context implementations now are able to create snapshots of themselves.
o Implementation does not use clone, to allow passing in service classes to the
  snapshot (services like logging should not be snapshotted).
o All context impl classes have been moved out from being inner classes to living
  in a common package under the multipaxos package.
o Resolved circular dependency between timeouts and state machines.
o Refactored ProtocolServerFactory to allow using it to assemble infrastructure for
  snapshotted state machines.
o Added equals methods to all stateful objects used during runtime by clustering.
o Refactored MultiPaxosContext to be explicit about which state is shared and required
  for which contexts.
Introduces initial work on cluster correctness proover.

o This exhausts all possible cluster delivery orders, generating
  a graph of all possible state transitions the cluster can make.
  Incorrect end states and bad loops can then be inferred from the
  graph and corrected.
added "node_labels" to root db discovery
Skips store scan at shutdown if no labels touched

If no labels were added or changed and no nodes received label updates
then skip doing a repopulation of indexes and label scan store at
shutdown.
Merge pull request #1745 from tinwelint/2.0-batch-insert-skip-noop-scan

Skips store scan at shutdown if no labels touched
Merge pull request #1744 from nigelsmall/master

Adding "node_labels" to root db discovery
Merge pull request #1721 from jakewins/morepoof

Cluster correctness prover