The NetClient is currently run on the main thread, called from main.cpp every frame.
This means that, if the main thread hangs up (mostly during map generation, but severe lag can also trigger that), the net client is not polled, and thus the server thinks it's losing connection to the client, which leads to timeouts.
Unlike the NetServer, which should be as independent as possible from the main thread, the NetClient is fundamentally tied to the game thread. The only thing that we really need to thread is the CNetSessionClient code, which actually calls net.
To ensure good performance and ease-of-use, lock-free queues for in/out-going messages are used.
This fixes artificial timeouts, while also increasing actual ping reports (since frame-time is no longer a factor).
It effectively reverts D1513/rP21842 and rP17772, all hacks around lag-timeouts (and bits of rP18140).