Let user decides when to take snapshot

Like goraft, let user decides when to take snapshot, user just call ```Zab.takeSnapshot``` and Zab is responsible calling ```save``` callback. User just decides the timing of taking snapshot, Zab still manages the snapshot file for them.

The benefit is there's more flexibility for application, some application might have specific preference of when to take snapshot.