[RFC] Extract Server and Client

This is a spike on a refactor. It works. I would like to add some unit tests but before I do I would like some comments on modeling.

The purpose of this refactor would be to make it easier to add features to the protocol.
Specifically I would like to be able to forward Pass, Fail, Pending to a mini test reporter to return live output.