wip

@bmizerany I change the original Save function to an interface. We also need to save snap here. I do not want to wrapper them by a function. I think an interface is more clear. (savesnap does not need to be blocking) 

Any thoughts?