Prioritized and Parallel combining

Add support for prioritized and parallel combining.

Support combining events of different types in parallel.

Events of type that are considered to be high priority are scheduled using an executor with sufficient threads to have one thread per type. Events of type that are considered to be low priority are scheduled using a single-threaded executor. All other events are scheduled using an executor with a fixed (configurable) number of threads (which defaults to 5).