Remove TCPSocket and use MessageProcessor instead

1. The endpoint might be closed gracefully here meaning `recv` could return 0. You need to handle this case.
2. Errors not handled?
3. Why 512? The protocol version is only 4 octets.
4. `recv` *may* not return the entire protocol version at once. E.g. it may return one octet with the first call, then the following three (or more) in the next call. The way this is currently implemented the buffer is discarded between invocations of `exec` so you could theoretically lose that first octet.
5. Unless you explicitly make sure to only read four octets you may inadvertently `recv` the start of the first JSON message. If you do this you need a way to pass this data to the message processor. Otherwise, when the message procesor begins `recv`ing it will start half-way through a message. I'd be against adding such additional capability to `MessageProcessor` so instead just make sure this only reads four bytes and nothing more.