Refactor to use channels instead of mutexes.
Merge pull request #1 from acquia/channelrefactor

Refactor to use channels instead of mutexes for shared memory.
Splitting out metrics, relays and logging for better separation of concern and testing.