Add support for 0-based partition IDs

Initial goal is to allow user commands to specify partition IDs as short integers `[0, ring_size)` instead of hash values. May consolidate other features such as Yokozuna's logical partitions later.
1. I'm not terribly averse to ditching support for passing the ring. Passing the ring seems to aid with abstraction, but it's not going to be used very often either way.

2. The downside, of course, is that whatever error message you receive is going to be far less explicit and harder to troubleshoot. Is there a reason you'd rather go the implicit route?

3. My original code checked to make sure the hashes were indeed partition boundaries, but I decided that it made more sense to make this a general hash -> partition mapper because it made it more useful and removed a throw. The `hash_is_partition_boundary/2` function was introduced so that code that needed to do this mapping could make an intelligent decision about what to do with hash values that aren't at the top of a partition.