Add support for zip import

This PR adds support for uploading a zip file containing a JSON file, as outlined in #4607 
It also adds consistent extension and type checking to both the db and upload API endpoints 

The next step is to refactor the importer quite significantly, so I'm stopping here with what is a reasonably self-contained piece of work. The refactor should make the code more testable as well :)

fixes #4607

- moves file checks from db and upload API endpoints to api utils
- adds code to accept and then extract a zip and pull out a JSON file
- zip handling requires a lot of dependencies - this needs a good refactor