Introduce partition IDs

Partition IDs are particularly useful for user-facing code but may have value elsewhere.

* Translation functions from hash (integer or binary) to partition ID and back. Partition IDs are zero-based up to (but not including) ring
  size.
* For user-facing tools, hash_is_partition_boundary/2 can be used to verify whether a hash provided by the user is actually the first in a partition.
* EQC and unit tests.

Supersedes #632 (this is squashed and rebased to our integration branch).

Andrew and I were both a bit confused about this for a bit just because of the formatting and nesting of calls - any way we can pull:
```
 riak_core_ring_util:hash_is_partition_boundary(
                      riak_core_ring_util:partition_id_to_hash(PartitionId,
                                                               ?RINGSIZE(RingPower)),
                      ?RINGSIZE(RingPower)) 
```
and similar constructs into their own, well-named functions to make it easier to understand?