Snapshot loop

Before send the real snapshot recovery package, leader send a snapshot request first.
When follower receives the snapshot request, it will change state to snapshotting state and will not do election timeout.
When leader receives the success response of the snapshot request, it will send the follower snapshot recovery request.
After receive the snapshot recovery request, the follower will recovery from the the snapshot and return to follower state.

Also change to keep recent logs after snapshot.