Merge pull request #832 from sjrd/optimizable-jl-math-methods

Make methods of j.l.Math optimizable.
Merge pull request #830 from sjrd/fix-desugar-var-while-true

Fix desugaring in an obscure case with while(true).
Merge pull request #829 from sjrd/mutable-param-defs-alt

Fix #825: ParamDefs of tailrec methods should be mutable.
Merge pull request #833 from sjrd/dce-after-inliner

Rerun a dce after the inliner.
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.
Discard VarDefs that are not actually used.
Discard side-effect-free LoadModules if not used.