multiprocessing.Queue() is holding onto resources ...

And it means we run out of file descriptors to use on OS X when running
tests...
Upon a socket.error, we need to close the filehandle

If we don't close the filehandle, socket.close() won't actually close
the underlying file descriptor because the fp still holds a reference to
it. Even when it then goes out of scope, the file pointer is still open.
close() can now exist everywhere

There is no requirement to special case _close() because of the fixes in
task.py whereby we do the right thing when it comes to the ROFB.
Fix tests