(#22363) Make Integer[from, to] work as a Range type

The idea to let Integer[x,y] create an array of all values in the
range was bad. It is far more valuable to use this to create a
subtype that limits the range of Integers to those between from, to.

The implementation of this allows the range to be specified in both
descending and ascending order (it is the same range in both cases), but
behaves differently when iterated over.

This also addes iteration of a type (added in the each function). Thus
enabling almost the same behavior as earlier e.g.
Integer[1,5].each |$x| { notice $x }, but without the step.

Each supports (as for Array) using either index, value, or just value
in the lambda.

Also in this commit is a default to_s for all types that calls
the type calculator to get a string. This because to_s is used
through out puppet (e.g. when doing notice).

Open ranges are supported by using default, a default in the first
position means -Infinity, and a default in the second position means
+Infinity.

It is not possible to iterate over a range with an open end.