refactor control.c output to be more abstract
Lots of code explicitly assembles control protocol responses, including the numeric response codes, the line separators, etc.
We should abstract this better to simplify code and for greater consistency in the protocol.