Remove synchronous database methods

This required doing additional caching at startup (e.g., item types and fields)
so that various methods can remain synchronous.

This lets us switch back to using the current Sqlite.jsm. Previously we were
bundling the Fx24 version, which avoided freezes with locking_mode=EXCLUSIVE
with both sync and async queries.

Known broken things:

  - Autocomplete
  - Database backup
  - UDFs (e.g., REGEXP function used in Zotero.DB.getNextName())
Zotero.DB updates

- Fix ES5 generator in executeFile()
- Remove deferred in executeAsyncStatement()
- Remove obsolete properties and wait level check
Allow StopIteration in queryAsync() to cancel query

And catch other errors and throw StopIteration so that they stop the
search. (Non-StopIteration errors in onRow don't stop Sqlite.jsm
queries. We were logging them but then re-throwing them, which didn't do
anything.)
Closes #527, Asyncify autocomplete
Use 'Zotero' object instead of this._zotero in autocomplete
Remove obsolete file (Zotero.Tag no longer exists)
Closes #526, Asyncify database backup

When a database backup is in progress, all other DB operations are paused until
it's done.
Fix error double-clicking on unopened regular items
Fix flash of "No items in this view" when switching collections
Use async DB queries for schema integrity check

Addresses #521
Add option to print stack with debug messages
Add Zotero.Utilities.defineProperty convenience method
Use this to create enumerable properties in object prototypes.
Add object key/ID validation. Centralize key generation/checking.

Conflicts:
	chrome/content/zotero/xpcom/data/tag.js
Document Zotero.DataObject. Minor tweaks.