All tests passing on FP Complete, but all but 1 passing on OS X (udp-local-receive). 

Several changes in here:

 * Some of the asyncs weren't actually shutting down, so added a TVar Bool to ensure the asyncs understand they should shut down, rather than ignore any exceptions

 * Moved away from network-simple for TCP, handling the listen socket directly and making sure bind set SO_REUSEADDR

 * Not convinced asyncs were exiting when cancelled if they were blocked in socket IO, so made sure that sockets could be closed before cancelling the asyncs that use them