Refactor the control port client implementation

The current control port implementation lives in Torbutton.

For #40938 (closed), we want to better integrate it with the rest of our patchset.

Also, we want to modernize it and remove some overengineered mechanisms (such as the dispatchers).