Add pubsub functionality (less change to Request portion of code - fits better with the style)

After thinking for a bit I'm resubmitting this pull request with some amendments.
The Request.scala file has been reverted and the code has been modified to be a bit more in line with the API as it currently sits - that is, you make a Sub request with the 'Request' object as you would any other command.
The sender is inferred from context and so sending a message subscribes the sender as one would expect.

I think this is the best approach and keeps the code base a little simpler and is in line with the current design choices.