Added more tests

The datastore (generally speaking this is S3) is now a generic interface to allow mocking up test objects, or even storing in Cloud Storage if we ever wanted to have an interface for that as well. I've exported many of the functions in the `fetch` package for the sake of testing from within the `main` package. This means tests can run using the middleware configured by `main` without needing to duplicate a lot of the boilerplate code.