Improve connection timeout handling

Currently, when a socket can't connect due to a timeout, the delegate method `socketDidDisconnect:withError:` is called. This is confusing (at least it was to me), because the socket was never connected in the first place. I've added a delegate method `socketDidNotConnect:error:` which is used for this purpose.