Implement hidden service authentication channel type

This channel is used to authenticate the client side of a connection as
being in possession of the private key representing a .onion hostname.
Clients authenticate by signing a challenge, including a random cookie,
using their private key.
Add OutboundConnector

This class is responsible for making outgoing connections to contacts
and negotiating authentication.
Implement a temporary solution for retrying connections after errors

This applies only to protocol-level errors, which are much more rare
than network errors. We need a proper solution on how to handle
connections, retrying, and errors, but now isn't the time to get
distracted by that. This will serve for now.