Allow overriding Range implementation

The current implementation uses a copy constructor to create defensive copies of the Range parameter. The side effect of this approach is that the Range class can not be overridden. I want to be able to override it, so I can provide an implementation of 'contains' which is more efficient for my very specific use case (so the performance improvement can't be generalized.)

This patch makes Range cloneable, and uses the clone method instead of a copy constructor, which solves the issue!