icpc compilation fix: don't use =default for now
RangeInterface range-based for loops now use the type of the
most-specifically defined clone() method in the child's inheritance tree
code changes:
 - RangeInterface::iterator it now a template
 - begin() and end() methods are now plain functions as they are moved
   outside the RangeInterface class
 - begin() and end() are template functions, returning an iterator for
   their argument type