Moved to inversion of control

While applying `request-mocha` to a repo, I ran into an issue with using different versions of `request` between `request-mocha` and the test suite itself. To prevent issues like that from recurring, I have moved `request-mocha` to an inversion of control design pattern.

In this PR:

- Move library to require `request` as a parameter to define a set of exports
- Update tests accordingly
- Update documentation accordingly

/cc @mlmorg @Raynos