More constant folding with operands disappearing.

Their side-effects must be preserved.
Insane rewritings of expressions involving Longs.

To remove as many Long operations as possible, and in particular
turn them into Int operations where applicable.

These insane rewritings are motivated by the shapes of expressions
we get if we inline Ranges (which is not yet done).
Add Range to overrides for tracking changes.
Backport https://github.com/scala/scala/commit/7abb0c911a7c3d60057fbcab6fc3687322a67082 to 2.10.
Mark Range and Range.Inclusive as inlineable classes.

This removes *all* the overhead if all 3 parameters of the
range are constants. For example,

  for (i <- 0 until 10 by 2) { ... }

If the step is either 1 or -1, and either start or end is
constant (very common case), then almost all the overhead is
removed, and in particular there is no Long operation anymore.
For example:

  for (i <- 0 until n) { ... }

If the step is constant > 1, start is 0, and the range is not
inclusive, then all Long operations also disappear.
For example:

  for (i <- 0 until n by 2) { ... }

The private method `fail()` was moved to an implementation in
the companion object of Range, so that it is not inlined along
with the useful parts of the Range.