Add testsuite for adapters directly relying on external modules

Testing the database wrappers is tricky, one approach is to write a set
of contract tests for the free monads they are supposed to be implementing,
then run the contract tests against each wrapper.

* In-Memory store is ran as a State monad
* LevelDB store is run against the filesystem in a temp dir
ContentIdentifier: Add support for SHA1 id's
optparse-applicative 0.10 broke compatibility

* Add upper constraint to avoid 0.10 for now
* optparse is not used in testsuites, remove
Rename test suites to 'pure' and 'external'

* One suite is for fast, pure tests
* The other is for code directly interfacing with external
  dependencies that cannot be abstracted away easily
Dupes: Update Put op to also take in a bucket key

* Storing an entry requires both the path and its hash to
  use as bucket key when searching for duplicates
* make Mem store tests pass
Content Identifiers: Support for serialize nil id
Dupes: Get LevelDB store to naively store buckets
Dupes: Working implementations of Level and Mem backed dupe stores

* Add test to dupes store contract
* Hide leveldb specific serialization inside LevelDB store
* Use Data.Set in dupes bucket as ordering does not matter
* Re-write part of the leveldb store to use new signatures
Remove unused dependency http-conduit
Dupes: Simple CRC32 bucket key calculation for adds

* Adding may still not be terribly robust, but it does work
* Can already list buckets
* Needs some work still, say to not try and hash directories