Handle actually issuing REST requests, not just building them

This PR adds the code to issue REST requests, which is surprisingly complicated. Based on the return value of the method, they could want:

* A deserialized JSON object (i.e. `Task<Toaster>`)
* A completion result (e.g. if it's a delete, so `Task`)
* The resulting data as a string (i.e. `Task<string>`)
* The actual response object (i.e. `Task<HttpResponseMessage>`)
* All of those things except for completion, for Rx too