fix segfault: handle client close frame gracefully
without a clientClose handler, the websocket library tries to write a
close reply back to the client. if the socket is already dead, this
panics in std/net.zig drain (exit code 139 / SIGSEGV).
add clientClose to the broadcaster Handler so we control the close
path and catch write errors instead of crashing the process.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>