Worker io refactor

Part one of four to refactor the Worker to Agent connection. This change adds an IRemoteWorker interface that is used on the Agent side for sending messages.
@davidfowl @abnanda1 @intern-felicco 
I prefer to write tests against the interface to emphasize the decoupling of the implementation. (I also tend to like explicit interface implementation, but that's not generally the style we use here).