User decides when to take snapshot.
Raise exception if the size of pending req is large.

Before we blocked the send method.
Merge pull request #190 from EasonLiao/snapshot

Let user decides when to take snapshot
New logic for synchronization.

1. Add subdirectory for log and snapshot.
2. Change the logic of synchronization to what we discussed today.
3. Leader will not send COMMIT to the server who hasn't acked the
proposal.