Reimplement matching algorithm using an Endpoints datastruct for both client/server, and make the tests pass.
- don't attempt a match until a proxy is available to service the request
- don't match ipv6 proxies to ipv4 servers
- empty string/tuple is a valid transport chain representing a raw data stream
report more detailed errors and show stacktraces when unsafe logging
tests for Endpoints