Event thread cleanup

Instead of the design with the striped executor being backed up by a cached executor, it now gets dedicated threads. This simplifies the design and probably makes it more performant since less queuing is involved and makes the behavior more predictable since there is not a shared workqueue anymore (the one of the cached executor).