[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'd be happy to get a suggestion on how to shorten it (we can drop the `prototype` part, since it's only used once without it). I don't think we can do this on `this`, because these methods need to be able to call up the chain, so `_super` should mean something different in each instance (I found one way described at the bottom of page [here](http://blog.salsify.com/engineering/super-methods-in-javascript)). ES6 is [introducing class/extends/constructor/super support](http://www.es6fiddle.net/hrut24r0/), which will be great, but that's not available yet :-(