Sort out requirements and setup.py

We really should do something more like https://caremad.io/blog/setup-vs-requirement/ instead of trying to parse `requirements.pip` in `setup.py`.

We should also use http://pythonhosted.org/setuptools/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies for some of our transport-specific deps.