Add require-subvert

Allows us to mock dependencies that are required on a function that is exported on a module.
Add lots of tests for request-promise