idbfs updates

 * don't leak streams in readFile and writeFile
 * added canOwn option to writeFile
 * updated idbfs sync to specify canOwn when writing to the local fs
 * don't invoke callback multiple times when idbfs syncfs internally hits multiple errors
 * reworked idbfs sync to use an index with openKeyCursor to avoid deserializing all values when getting the set members

I reworked the majority of library_idbfs.js because of the last point there, which greatly improves its performance when working with large (~200mb) amounts of persisted data. Previously, each time it performed a sync it would deserialize all of the data in the store when figuring out the members of the remote set, now it uses an index to get at filename / timestamp info and only deserializes the actual content when necessary.

Ran `browser.test_fs_idbfs_sync`.