Added pubsub functionality

Added pubsub functionality - see test cases for usage.

Notes:
- The API should be unchanged.
- Request was made abstract and two implementations were added - one for pubsub. An additional apply was made on the Request object that still allows concrete requests to be produced with either strings or bytestrings to maintain api compatibility. 
- Removed code where Bytestrings were being created from strings for Request instantiation as it is unneeded.
- organized the imports a bit removing unused imports and ordering them similar to the style guide's recommendations.

Chris should review this and request any changes - please don't accept the pull request without Chris' approval.

Thanks,
-Jason