Move the socket internal connection to it's own method
Capture Thread exceptions when running async
Don't set Thread.abort_on_exception = true

It's not the library's responsibility to do that, even if
Thread.abort_on_exception = true is generally a good thing.
Rework connection a bit