Wait for the item pane to initialize before focusing first field
Fix deleting saved searches
Move defineProperty from ZU.Internal to Zotero
Allow to define properties for late initialization via defineProperty
Default to "configurable: true" in defineProperty
Transition __defineGetter/Setter__ to Zotero.defineProperty
getClassForObjectType => getObjectsClassForObjectType
Add id and libraryID getters for all data objects
Add a centralized, modular .save() method to DataObject
.save calls ._initSave(), _saveData(), _finalizeSave() internally passing `env` object to each to act as an environment for passing around variables
* _initSave should determine if the save is possible and return a promise for either `true` or `false`. It should also set up the environment, e.g. determine if this `isNew`
* _saveData performs the actual saving to the database, but should not do any terminal steps in the save process so that any extending classes could extend this method to write additional data to the database
* _finalizeSave should perform any finalization before the data is committed to the database.

_recoverFromSaveError is called with `env` and an error that occurred. This method should perform any recovery steps, e.g. discarding the save and reloading the item from the database into the cache.
Pass fixGaps to Zotero.Search.save() in an options object
Add Zotero.extendClass
Add Zotero.localeCompare
Can be used directly in Array.sort() as the sorting function.
Uses LocaleCollateion.compareString internally
Use Zotero.extendClass for inheritance
Add Zotero.Libraries.isGroupLibrary
Additional tweaks to DataObject & descendents to support inheritance
Validate numeric field IDs
Various fixes for Zotero.Item
Move loadPrimaryData to Zotero.DataObject
Move erase to DataObject and make it modular
Add loadAllData to Zotero.dataObject
Useful when trying to duplicate items, which requires access to all data