* fix: bump ping timeout for poor connections
* fix: always close relay on ping failure
* fix: add multiple ping attempts before closing relay connection
* fix: only 3 ping attempts
* fix: pool check for relay context done
* fix: include relay URL in debug log
* fix: do not return after closing relay on max ping attempts
* fix: compile error
- make BatchedSubManyEose() use a single duplicate id index and use it for replaceable loaders;
- fixes parsing follow entry from kind:3 events (and others);
- adds a "cause" to most cancelation errors in relay/pool;
- remove the inherent cache from dataloader (we have our own hopefully);
- increase max frame size we can read from any websocket to 2**18 (262k), which gives over 2000 item lists.
We replace the bare websocket.Conn type with a new Connection type which
implements `WriteJSON`, `WriteMessage`, and `Close`. The Connection
type adds mutexes around writes since gorilla doesn't support concurrent
writes to websockets.
Signed-off-by: Honza Pokorny <honza@pokorny.ca>