Refactoring to logically separate component modules in order to make it easier to develop tests, metrics, tracing, etc. Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>