[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)
I hate calling this ```env```. First, the ```arguments``` is just for the ```fixGaps``` argument for ```Zotero.Search.prototype.save```? If so, that should just be made a proper option, and then we can take out ```arguments```. And then for the ```transactionOptions```, can we just make that a property of ```options``` itself so that we can just pass around ```options``` instead?