Use shared_ptr for running HttpRequest.

This makes the ownership model *slightly* more sensible. Also, for cancellation support, I can't have the HttpRequest objects just disappear out of the blue, we need something to be able to call ```->Cancel()``` on! :stuck_out_tongue: