on disk snap

## goal: 
1. save snap to disk
2. load snap from disk
3. detect corruption

## non-goal: 
1. glue with etcd.
2. async snapshotting. 
3. on disk log compact.
4. buffering and performance.
if the directory doesn't exist, is it better to return ErrNoSnapshot also?