- Add sync.RWMutex to ConsistentHashRing struct
- Use Lock/Unlock for write operations (AddNode, RemoveNode)
- Use RLock/RUnlock for read operations (GetNode, GetNodes, IsEmpty)
This allows concurrent reads (the common case) while serializing writes,
preventing race conditions when multiple goroutines access the hash ring.
Closes#35
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>