Don't mutate clients

Fixes #68 (as well as a number of other related bugs).

Requests will no longer mutate clients.

I created an integration test that actually launches a server in a separate thread... I think it might be the best way to handle it but it will of course fail if it isn't allowed to bind a port or hits a race condition binding one.
Same here, seems this can be called directly from the eventual instead.

I think removing these two (cancel and wait), really cleans up the interface. Our HttpClient would then only have  a method to perform a request (which seems reasonable).