Major refactoring and bug fixes

* Allows for recursive requirements files (via the -r flag)
* Ignores options set inside the requirements file (besides -r)
* Refactors the code into smaller chunks to make it easier to read/test.
* Uses docopt for easier command line parsing.
Its unclear whether this is still needed as the issue has been fixed.