withIOManager allows to do asynchronous io on Windows hiding the differences between posix and Win32.
It starts an io manger thread, which should be only one running at a time, so
the best place to call it is very close to the main function and last for
duration of the application.
Async IO operations which are using the iocp port should not leak
out-side of withIOManager. They will be silently cancelled when
withIOManager exists. In particular one should not return IOManager
from withIOManager.