Generate a hash value such that two ranges
with the same start and end points, and the
same value for the “exclude end” flag, generate the same hash value.
static VALUE
range_hash(VALUE range)
{
long hash = EXCL(range);
VALUE v;
v = rb_hash(RANGE_BEG(range));
hash ^= v << 1;
v = rb_hash(RANGE_END(range));
hash ^= v << 9;
hash ^= EXCL(range) << 24;
return LONG2FIX(hash);
}