New logic for synchronization.

1. Add subdirectory for log and snapshot.
2. Leader will not send COMMIT to the server who hasn't acked the
proposal.
3. Add firstDivergingPoint method to Log interface.
4. Change the logic of synchronization:

if peerZxid == this.lastZxid:
  send empty diff
else if peerZxid > this.lastZxid:
  if they are in same epoch:
    send truncate
  else:
    state transfer
else:
  if snapshot.zxid > peerZxid:
    state transfer
  else:
    does truncate + delta or diff depends on whether they have diverging point
    or not.