LOGBACK-977 - AbstractSocketAppender loses event for every socket connection break

This pull request aims to fix losing events during a socket connection problem. Previously whenever the socket connections drops at least one event is silently being dropped. 

I order to verify that an event actually has been transmitted before removing it from the queue I switched the logic for queue consumption from "take" to "peek/remove". 

This required to abandon the usage of a ```SynchronousQueue```, because it does not support the peek method. However, having an ```ArrayBlockingQueue``` with the size of one should cover the use-case. For compatibility reasons I treat every queue size smaller than one as one inside the ```AbstractSocketAppender.newBlockingQueue``` method. The ```AbstractSocketAppender.start``` method will now output a deprecation warning when it finds a queue size of zero.

I would like to "clean-up" and extend the existing ```AbstractSocketAppenderTest``` and make the ```AbstractSocketAppender``` a little bit more testable by pulling out the aspects of queue creation and output stream creation to provider classes. Please tell me if that is fine with you guys, so I can go ahead and do the change.

Btw. when looking through the documentation in the website module I found this sentence:

 _In particular, in the extreme case where the network link to the server is down, the client will be eventually blocked._ 

Looking at the most recent version of the ```AbstractSocketAppender``` this sentence seems false. Should I fix it, while I am at it?

this description is outdate, please read the comments below.
About stopping the appender in case of an interrupt while waiting for a socket connection or while waiting for an incoming event, shouldn't that be handled by the ```LifeCycleManager```? I am not really familiar with the logback lifecycle management but shouldn't the LifeCycleManager stop the appenders and the context and thus effectively stopping the global executor service?