Add a method to the Processor to commit a list of Operations. This provides a sort-of-batch mode where you can allocate a number of Operations without committing them, then use the RingBuffer batch publish to commit all of them at once for a little more efficiency.
Removed high_scale_lib from the dependencies and replaced the use of NonBlockingHashSet with a simple synchronized version. Also tweaked InMemoryQueuePersistor to use a simple synchronized Map as well.
Modified the AsyncAppender to use the Reactor Processor abstraction instead of the RingBuffer directly. Implemented a Queue-based approach so that each AsyncAppender needs two threads now instead of 1: the thread to power the RingBuffer and a separate publisher thread that pulls items from a queue and publishes them in the RingBuffer.

The reason for this indirection is throughput. Much higher throughputs can be achieved this way than by directly using the Processor to publish log events. In profiling the component, it was clear that running tasks like log file writing inside the RingBuffer event handler is suboptimal when there are multiple producers. Now multiple producers simply add their log events to an internal Queue which the publisher thread drains as quickly as possible. The Processor is then called with a batch size equal to the number of events just pulled off the Queue. This provides an order of magnitude higher throughput than direct publishing of Operations through the Processor.