[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)
You're defining these just to clarify the interface? I'd say they should either not be defined or throw errors to clarify that nothing is actually being saved, since everything should really override them, right?