Make HashRing public

Useful in order to be able to add/remove servers, for example for auto-scaling or connection problems
Allow sharded publishing

Consistent hashing on the channel name to determine which node will
publish
Add `on` and `once` listeners
Allow sharded eval

Hash first argument passed to eval to determine which client to apply command to