make the DRb uri configurable
bin/drb_cached can take uri as an argument
refactor Client methods to look up the server before performing an operation
move over some hashing & NodeSet code I wrote the other day
Make node set more useful.

Previously NodeSet only took a count of Nodes when it was being
initialized. That was enough when we were validating it, but no longer!

Now NodeSet takes a list of objects, and node_for returns the actual
stored object which corresponds to a hash.
DRbCached client implements consistent hashing of keys across clusters.

The client is initialized with a Server or list of Servers. It computes
the hash of the Server object's string and maps the hash to ranges on
between 0 and 0xFFFF_FFFF.

When the client wants to read or write a value to the cluster, it hashes
the key and writes to the first node whose hash >= hash(key).