(For discussion) Support dynamic cluster reconfiguration

Support for cluster reconfiguration using the algorithm in the Raft paper.  For discussion; I don't think we should merge just yet.

There are also a few bug fixes in here, which I may pull out and propose separately.

The biggest problem is to figure out how to test this.  I have some integration tests which use a key-value store that I've built using Barge; I bring up the actual services, kill and (re)start them and check it behaves as expected:
https://github.com/justinsb/cloudata/blob/master/cloudata-keyvalue/src/test/java/com/cloudata/keyvalue/ClusterTest.java

Is creating an integration test the best option here?