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.
This seems better as a global method in the snapshot package. `Load(io.Reader)` that can be used like `ss, err := Load(Latest(dir))`