Watching the sporadic CI failures it seems to come from these tests a
lot of the time, this PR cleans up and simplifies (while testing the
same things):
1. Lots of tests were using threads without a need for it
2. Tests had hardcoded `time.sleep` calls which is never a good idea
3. An unclear abstraction was implemented without a real need
4. They weren't being ran on non-windows
5. The `client_connects_to_open_but_not_accepting_port` was not doing
what you wanted to test for, the `tcp_server` proc was returning, and
then `dial` was called, which meant that the server already closed
and you got a refusal error. Now it correctly listens without
accepting, which even results in a different error because the kernel
buffer would have buffered the send