better disconnection handling, handle webauth errors

- Account for errors on a connected socket
- Don't wait forever until the OS throws ETIMEDOUT
- Handle Steam server dying right after the connection
- Use an explicit `_preventReconnect` instead of relying on `_sessionID`
- Reconnect if the initial connection fails, too
- Handle EResult.Fail