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.
I wonder if this function deserves a different name name. It feels less like a `setup()` and more like a `start_request()` (or something like that).