ircsocket: don't shutdown on error
Instead, signal the faulty state and re-raise on the next select. This
is to improve the bot behavior if the socket error happens in a separate
thread while the main loop is still processing input.
Such a situation can be given for example during a netsplit. In some
cases (e.g. the bot is on many channels) the processing of the netsplit
events can take a long time, so that the server will disconnect the bot
for ping timeout. While the bot has not realized it has been
disconnected (not got to the :ERROR message from the server yet, and the
socket still has (buffered) data), some action (e.g. an rss update)
causes the bot to try to talk to the server, resulting in a broken pipe.
At this point, with the old code, the socket would be disconnected
without the bot realizing it, causing it to fail to reconnect.