Optional dependencies

The `request` library has a rather large dependency chain that not everybody needs. In cases with very little disk space (e.g. embedded platforms) this can be a problem. This pull request changes some of these dependencies into optional dependencies, which are still installed by default, but are skipped when installed via `npm install --no-optional`. The relevant unit tests are skipped in case the modules are not found on the system.