fix some flakiness in integration spec
extract router endpoint logic into EndpointPool

This structure is responsible for maintaining the uniqueness of
registered endpoints per URI, and providing a random endpoint on
request.
fix a few flaky tests, have .Run not block forever

- Router.Run now returns as soon as it's in a good state

  definition of good: subscribed to router.register, sent router.start,
  etc., and about to start serving traffic.
- fix EndpointPool double-counting equivalent endpoints (same addr)
- workaround go net/http bug (see comment in proxy_test.go)
log to /dev/stderr when running tests
log by url when pruning stale droplets
fmt