refactor WebSocketCore <-> WebSocket bindings

- [x] rewrite `WebSocketIncoming` to keep track of length
- [x] remove from listeners on end, pass socket tests
- [ ] replace `FrameReadState` with `WebSocketIncoming`
- [ ] do the same with `WebSocketOutgoing`
- [ ] update tests for `WebSocketCore`
- [ ] update docs of `WebSocketCore`