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.
Merge pull request #1721 from jakewins/morepoof

Cluster correctness prover