Fix #1157: Negative number literals should be printed with parentheses.
Fix #1155: Int unary -.
Remove the absurd unary Int_+ and Double_+ from the IR.

They are always no-ops anyway.
Merge pull request #1156 from sjrd/fix-int-unary-minus

Fix Int unary -
Add direct support for Long in the IR.

This basically delays the translation of Longs to RuntimeLongs from
the compiler to the desugaring. This brings the following benefits:

* It relieves the compiler from the knowledge of RuntimeLong.
* It makes the IR independent of the implementation of Longs (so we
  may change it in the future in a binary-compatible way).
* It allows the optimizer to reason about Longs, in particular to
  constant-fold them.

This prompted several cleanups in the whole Long implementation:
* Incorporate fromString() directly into j.l.Long.parseLong().
* Since done in desugar, "inline by hand" the methods of the
  companion of RuntimeLong. This basically means call directly
  whatever they were forwarding to.
* Hence, there was no method left in this companion, so I could
  merge RuntimeLongImpl back into it, as it used to be.

The whole thing is much cleaner now.
Merge pull request #1159 from sjrd/long-in-ir

Add direct support for Long in the IR.
Constant-fold Matches.
Fix {ir,js}.Block.toString().
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.
Merge pull request #1145 from sjrd/inline-away-for-range

Fix #1144: Inline away for-ranges