Released Dexie v0.971

Bug Fixes
=========
* Promise.finally() did only call function on success. This bug was
introduced in version 0.96.
* WriteableTable.put() did not work (failed with DataError) if all of
the following conditions were true:
1. There was a registered 'creating' hook
2. The table schema used an inline primary key.
3. The object to put had the inline key on it
4. There were no existing object in DB with that key.
What it did was to call add() internally with the inline key specified
in the second argument, which resulted in DataError since the IDB spec
forbids to specify key if object has an inline key.

Extended the API
================

* Dexie.tables property - an array of the all Table instances.
* Table.reverse() method: Shortcut for Table.toCollection().desc().
* Table.filter() method: Shortcut for Table.toCollection().and().
* Table.update() method: Possible to supply an object instead of key, as
first argument.
* Collection._ctx.isMatch: Makes it possible to test an object against
the collection without
querying the DB. Could be useful for a future version of the
Dexie.Observable addon, to
observe a Collection live.
* Collection.until(): Similar to Collection.limit() but with an
expression instead of a Number.
* Deprecating Collection.desc() and introducing Collection.reverse().
(Collection.desc() will still work)
* Collection.firstKey(): Shortcut to
Collection.limit(1).keys(function(a){return a[0]})
* Collection.lastKey(): Shortcut to Collection.reverse().firstKey().

Optimization
============
* WhereClause.startsWithIgnoreCase(): Using IDBKeyRange.bound() to save
one unnescessary iteration.
* WhereClause.equalsIgnoreCase(): Using IDBKeyRange.bound() to save one
unnescessary iteration.
* WhereClause.anyOf(): Using IDBKeyRange.bound() to save one
unnescessary iteration.
* hook('updating'): Object- and Array properties were always considered
changed. Now only considered changed if they actually yield different
values.