[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 took these out, but these are still used. I'd be OK with taking these out and just using ```parentID``` and ```parentKey```, but right now this breaks child item saving. (At least, child item saving is broken, and I'm guessing it's because of this.)

(I don't remember exactly why I did this — maybe just for consistency with the ```parentItemID``` DB column?)