simplification of SocketApender connection logic

This pull request aims to simplify the connection logic of the SocketAppender by doing the following:

* not spawning an additional connector thread, since the logic is already running on another thread
* holding the SocketConnector as a member to avoid unnecessary instantiation of that factory
* not querying the interrupted flag of the thread in the connection loop anymore but instead making the presence of a socket the loop condition (the SocketConnector only returns null if it was interrupted while trying to create a Socket)

In addition a few more unit tests were added to cover use-cases which have been refactored with this pull request.