I haven't worked with IndexedDB at all before, so can you educate me a bit?  I see you doing this kind of pattern a lot:

```javascript
	var deferred = when.defer();
        var transaction = that.db.transaction([FILE_STORE_NAME], IDB_RW);
        var files = transaction.objectStore(FILE_STORE_NAME);
```

So you pass around the objectStore `files` object all the time, is that the idea?  When and how does the transaction get completed/aborted?