(#1973) - Resolve to {ok: true} on destroy
(#1979) - pass limit option to leveldb changes and fix limit + live in http
(#1999) - Localstorage-down to package.json
(#1997) - parse user agent for the perf tests
(#2003) - remove bluebird from browser tests
(#1990) - move allDocs keys query to adapter.js

This moves the allDocs() logic when opts.keys is
used to adapter.js, which allows us to just do a
simple multi-key fetch for each non-http adapter.

This improves the performance of leveldb.js and should
not have an impact on the performance of websql.js or
idb.js.  Plus it's less code.
(#1954) - WIP change batching for replication
Return results on change event
Return error XOR results to opts.complete
Fix error to bulkDocs write errors (still ugly but better)
Generate error and complete events
Call opts.complete on error and complete event.
Simplify changes mock in sync test
Simplify changes mock in test issue1175
Create listeners conditionally

Only create listeners to call opts.onChange and opts.complete if they
are functions.
leveldb workaround

leveldb changes ignores options.limit and doesn't stop when the changes
promise is cancelled. This makes it a bit hard to deal with in a way that
limits maximum memory consumption.

This workaround works, but performance is terrible when replicating a large
number of changes because onChange is called so many times.
Handle old and new API in mock
Workaround to leveldb/changes limitations
Disable fetchGenerationOneRevs

With fetchGenerationOneRevs enabled, replication of 500,000 documents
from leveldb to http takes several hours. With it disabled, it takes
under 5 minutes.
Make fetchGenerationOneRevs optional
Begin refactoring to use promises
Reimplement handling of revision 1 documents
Change fetchCheckpoint to getCheckpoint