[Async DB] Modularize Zotero.DataObject.save()

At this point, I just mostly want to check if this is an OK direction.

What this allows us to do is, after extending, say, a Zotero.Item class, to override the _saveData method in order to write additional data before the DB transaction is committed. It also removes a bunch of boilerplate code from DataObject child classes (there's probably more that can be removed)
Previously, this was `this.reload()`, which in retrospect probably makes sense, since a save should not touch unsaved data, but I figured it's probably best to reload all data from DB.