Decouple Controller from HttpProxy and SocksProxy. Use a Tunneler interface so either a Controller (tunnel pool with lifecycle management) or Tunnel (single, specific tunnel) may be used as the tunneler for proxies. This is to support prospective test scripts that will test tunnels to specific servers.