Refactor shared tests out of providers

This PR closes #18.

Just an initial draft right now of how the shared tests will work.
The idea is to have a top-level `shared_tests` directory which includes test cases for all the events (`onReadFileRequested` etc). Each provider can import the test cases, and pass their implementation of the function to be tested to the test function. 

Providers can still implement any tests specific to their own internal behaviour in their own tests directory.

Looks good @jmuk?