Decouple ::Object from knowing how saving is done.

This will allow backends other than files in the future without api
change