Make methods of j.l.Math optimizable.

* Avoid to use native JS functions when possible: the optimizer
  does not know about these functions and cannot reason about
  their behavior.
* Add @inline to all simple methods.
* Make PI and E 'final val', because that's what they are as Java
  static final fields + it is better optimized.
Merge branch 'optimizable-jl-math-methods' into base-with-prs
Print if-else-if chains in a nicer way.
Consider more simple methods for inlining.
Fold If constructs.
Discard side-effects of statements.
Optimize pattern matches.
Inline methods of IndexedSeqOptimized in an ad hoc way.

Just because.
Circular inlining detection and prevention.
Add New to cases of SimpleMethodBody.
Add support for passing LocalDefs through chains.

So that it becomes possible to inline a closure used two
levels of inlining (or more) from where it is declared.
Mark param defs of tailrec methods mutable only if modified.
Handle This() more like VarRef() in the optimizer.
Inline more simple methods.