Created ParallelForwardingAppender, use volatile modifier on shutDownRequested

Created a base class AsyncForwardingAppenderBase.

Made AsyncForwardingAppender inherit from AsyncFowardingBase and removed members that are defined in the base class.

Created class ParallelForwardingAppender, inheriting from AsyncForwardingAppenderBase.  This class uses BlockingCollection<T> to implement a lossless async forwarding appender that does not have to sleep in the consumer thread loop.   Created associated unit tests.

Added the volatile modifier to the shutDownRequested member because it is accessed from two different threads and we want to ensure that a cached version of the value is not being read in the subscriber thread loop.

Verified all tests pass.
Although the Subscriber thread is allowed to continue the thread will now just exit because there is no while loop around the try catch. We could call StartSubscriber() again to reinitialize the thread or put a while(!cancellationToken.IsCancelleationRequested) around the try catch? What do you think?