Refactor to expose common interface among messages

Hey man, I took a shot at this refactor, figured I'd see if you were into it. I dropped my ZeroMQ version down and was able to run the tests.