4 changes in this code:
1) When caught and rethrowed as a IOException we always rethrow InterruptedIOException
2) When we were both throwing an exception AND resetting the interrupt status we only throw an exception now.
3) When we were trying to reset the status by Thread.interrupted() (which does not do that), we now do it for real with a Thread.currentThread.interrupt().
4) Sometimes, we were rethrowing something else then InterruptedIOException, while the contract would have allowed it. I've changed this as well.
This patch does not make means that we're fine when we're interrupted, but we're globally cleaner at least. I will then create other patches specific to some parts.