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.
To be fair, cancel isn't a particularly useful thing to have in general (in my opinion). I feel like ignoring the result is much more likely. Will look to clean up to interface a bit probably, yeah