Support Parallel Combining using multiple threads.

Event types can be split up into three priority levels. High priority
events are scheduled using an executor with sufficient threads to ensure
each event type is given its own thread. Low priority event types are
scheduled in series using the same single-threaded executor, and all
other (normal priority) events are scheduled using an multi-threaded
executor with a configurable number of threads.

As a consequence of this, CombineComplete events are generated for each
event type.