feat: add direct UDP messaging for high-throughput communication
Add send_direct/send_to_addr API for point-to-point messaging:
- Protocol.send_direct sends to known members by node_id
- Protocol.send_to_addr sends directly to any UDP address
- Cluster.send and Cluster.send_to_addr expose the public API
Fix critical bugs discovered during benchmark testing:
- Fix infinite loop in dissemination.ml drain function
- Fix User_msg encoding losing topic/origin (encode as length-prefixed)
- Fix cluster_name mismatch causing silent message drops
Add throughput benchmarks for direct send vs gossip comparison:
- swim_throughput.ml with -direct/-gossip flags
- swim_throughput_parallel.sh for multi-node testing
- Go memberlist/serf throughput benchmarks for comparison
Results: Direct send achieves ~400 msg/s with 100% delivery vs
~2 msg/s with gossip piggybacking. Memberlist achieves ~2000 msg/s.