Refactor data layer step 5

Depends on #300 

Add querying to `MongoStorageEngine` and clean up *all* the things (check out that red to green ratio).

**Implement querying against `MongoStorageEngine` and integration with `NewDataSet`**
- No response munging is done in the mongo layer now, it's done in `NewDataSet`. Not ideal yet, but better.
- A few functions about the query have been moved into properties on the `Query` object.
- Noe of the flask apps depend on `DataSet` or `Database`

**Deprecated migrations**
This isn't clean, we need to rethink how migrations are done all together. Especially now that we can create / delete and empty through the API.
- Change migrations to depend on MongoStorageEngine
- Deprecate all existing migrations; they don't work cleanly with the new model

**Remove `backdrop.core.database` and `DataSet`**
- Remove backdrop.core.database module, it is now completely superseded by backdrop.core.storage.mongo
- Remove DataSet class from backdrop.code.data_set, it is now completely superseded by NewDataSet (renaming will happen in a later commit)
- Remove query execution methods from Query object, they are now handled by NewDataSet. Moving query and response modules into core will happen in a later commit
- Raise a backdrop error when data set creation fails rather than bubbling up the mongo error
- Refactor storage engine tests so that they can be shared between multiple storage engines. They essentially become a suite of tests that verify a storage engine complies to the interface.
- Remove *loads* of database tests. There were a lot of duplicates, relevant ones were ported to either test_mongo.py or test_data_set_integration.py