Make range generic
Use {} instead of {:?} for debug!ing in util::range
Require Range<T> to have a signed integer T

This allows for generic +ve/-ve offsets