Update Raft algorithm to match the paper

Unfortunately, this turned into a big patch. The most important thing is
that now a leader determine where a follower's log diverges by stepping
back one entry at a time. This has better conceptual integrity than the
old algorithm, which fetched some information during RequestVote.

Other changes:
 - Adds dump to ostream methods for the entire consensus module; useful
   for debugging.
 - Fix #44: critical Raft data corruption bug: commitment of entries
   from prior terms. The new definition for commitment is explained in
   the paper.
 - A new leader now adds a no-op entry to its log, so that reads are not
   blocked forever waiting for a writer to advance commitIndex.
 - Leaders now accept writes immediately, rather than waiting to commit
   entries from prior terms. Waiting doesn't make much sense anymore
   given the new definition of commitment; it'd be deadlock or, at best,
   awkward.
Rename a bunch of Raft identifiers

Now the implementation more closely matches the paper's description.
Renamed the following:
 - AppendEntry to AppendEntries
 - committedId to commitIndex
 - logId to logIndex
 - lastAgreeId to lastAgreeIndex
 - nextSendId to nextIndex
 - candidacyThreadMain to timerThreadMain
 - followerThreadMain to peerThreadMain
 - candidacyThread to timerThread