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).

Or, even something like:
```
prop_ids_are_boundaries() ->
    ?FORALL(RingPower, choose(2, ?RINGSIZEEXPMAX),
            ?FORALL(PartitionId, choose(0, ?RINGSIZE(RingPower) - 1),
		    begin
			PartitionIdHash =  riak_core_ring_util:partition_id_to_hash(PartitionId,
                                                               ?RINGSIZE(RingPower)),	
                    	IsBoundary = riak_core_ring_util:hash_is_partition_boundary(PartitionIdHash,
									?RINGSIZE(RingPower)),
			IsBoundary =:= true
		    end
		)).
```
I know it's a bit more verbose, but is much easier to read/understand.