Implement "manager" logic for service side onion services

When an onion service is configured to be run, we need a higher-level manger/reactor object that does the following:

  1. Keep a set of introduction point circuits established, and rotate them as needed.
  2. Keep an up-to-date descriptor (containing all the intro points) generated, signed, and uploaded to the relevant hsdirs.
  3. Wait for messages on the introduction point circuits
  4. In response to those messages, make connections to client rendezvous circuits and complete handshakes with them.
  5. Keep those rendezvous circuits open as needed, wait for BEGIN requests on them, and use them to establish connections to locally configured ports.

There is currently a sketch of all the above in !972 (merged) in a tor-hsservice api.

This is a high-level ticket to handle the creating of the high-level marshaling logic here. We should make lower level tickets for the individual activities.

Edited by Nick Mathewson