Make the worker thread a cleaner abstraction for interfacing with the rest of the codebase.
Refactoring to logically separate component modules in order to make it easier to develop tests, metrics, tracing, etc.