Refactor data layer step 3

This depends on #298 

This implements the save pipeline and dataset deletion against the `MongoStorageEngine`.

In this pull request the save pipeline is quite refactored to be a clearer set of steps that are run against a list of records before they're saved. see [here](/here)