[RFC] Extract Server, Client, and Commands

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.