Some refactoring to support different election.

Includes:
1. Move transport logic from ParticipantState class to MainThread.
2. Change the interface of Election.
3. Pass the Election object to leader/follower so they can reply their vote.
4. Make the election method configurable.
Workaround on NettyTransport for tie conflict.

Does some random wait once the disconnection is caused by a tie break.
Add FastLeaderElection.