Shutdown NettyTransport sender by enqueueing a shutdown message.
Fix the snapshot transferring bug in NettyTransport.
Fix the snapshot transferring bug in Participant.
Change the SnapshotTest to verify the bug is fixed
Some refactoring to support different elections.

Includes:
1. Move the logic of transport from ParticipantState to MainThread.
2. Define election message.
3. Change the interface of Election.
4. Make Election method configurable.
5. Pass election object to Leader/Follower so they can reply its leader vote.
Workaround on NettyTransport for tie breaking.

Does random wait if the handshakeFailure is caused by tie breaking.
Add FastLeaderElection.
Fix the bug of communicating the sync timeout value.
Merge pull request #161 from EasonLiao/netty

Enqueue a message to shutdown NettyTransport and increase timeout for Ne...
Merge pull request #168 from EasonLiao/fix_sync_timeout

Fix the bug of communicating the sync timeout value.
Fix the warning in test.
Merge pull request #167 from EasonLiao/fix_warning

fix the warning in SyncProposalProcessorTest.java
Add tests for FastLeaderElection.
Fix findbug warnings.
Merge pull request #169 from EasonLiao/fix_findbugs

Fix findbug warnings.
Merge pull request #150 from EasonLiao/fast_election

implement a leader election algorithm that finds the best history in a quorum