LOGBACK-848: refactored SocketAppenderBase

Refactored SocketAppenderBase.  Now it uses SocketConnector for its (re-)connection logic, and uses an asynchronous task to dispatch events to the remote receiver.  A configurable queue is utilized to relay logging events from the append method to the dispatch task.  When the queue length is zero (the default), a SynchronousQueue is utilized, preserving the previous appender behavior.  When the queue length is greater than zero, a bounded queue is utilized, allowing the appender to efficiently drop logging events when the remote receiver (or network) cannot keep up with the rate of logging events delivered to the appender.

Please review and merge or provide feedback.