fix all the things

- options should throw and and async errors should be passed to the callback. right now it's the inverse
- fix some invalid tests
- fix options. previously it only threw when both required options where missing, but not when only one of them where.
- added some missing error handling
- fixed some inconsistent indentation
- made it use path.join correctly (also process.cwd() is moot)
- improved the readme and package.json


You can view the diff without indentation changes here: