Fix race condition in Candidate election

electionTimer must be set before anything that could call transition
MajorityCollector should handle case of empty list of Futures

We now check if we are complete immediately if we have no futures.

This happens when we set up a single node cluster.
Merge pull request #38 from justinsb/fix_race_condition

Fix race condition in Candidate election
Merge pull request #39 from justinsb/single_node_cluster

MajorityCollector should handle case of empty list of Futures
Add an actual start state and load the log in that state instead of the RaftService
Allow builder to specify state machine executor
Allow commit to return a result from the state machine
Verify the previous state as part of every state transition
Refactor must-be-leader logic into base state

This is in preparation for other must-be-leader logic
Merge branch 'dry_base_state' into cluster_changes
Initial work on re-configuration
Merge branch 'master' into cluster_changes

Conflicts:
	barge-core/src/main/java/org/robotninjas/barge/RaftService.java
	barge-core/src/main/java/org/robotninjas/barge/log/RaftLog.java
	barge-core/src/main/java/org/robotninjas/barge/state/Candidate.java
	barge-core/src/main/java/org/robotninjas/barge/state/Follower.java
	barge-core/src/main/java/org/robotninjas/barge/state/Leader.java
	barge-core/src/main/java/org/robotninjas/barge/state/RaftStateContext.java
Inject ConfigurationState with suitable starting state
Cope with transitional configurations
Cope with empty configurations
First passing test with configuration change

Admittedly with no data!