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.
@bmizerany I have separated the `Latest` and `Load` functionality. 
The `snapNames` function returns a list of names since the load function need to do fail back.
Load function can remove the bad snap and then call `Latest` again. But I think it is overkill.