Refactor JSInterop transformer state management
Fix #192: Fully support (sane uses) of scala.Enumeration

Note that this commit adds primitives for
scala.reflect.NameTransformer.MODULE_SUFFIX_STRING and
scala.reflect.NameTransformer.NAME_JOIN_STRING since
Enumeration.toString relies on them, but they rely on the
scala.sys.props infrastructure that we do not want to implement.
Merge pull request #196 from gzm0/enumerations

Fix #192: Fully support (sane uses) of scala.Enumeration
Add missing comparison ops to js.String and fix compiler to support them
Add proxy object for java.lang.String implementations

The trait scala.scalajs.runtime.RuntimeString contains all
implementations for methods on java.lang.String. The compiler
automatically forwards calls to these methods to the trait's
implementation class.

This also fixes #164 (Implement java.lang.String.getChars)
Forward constructor on String to RuntimeString (equivalent to methods)

This also fixes #154 (Implement all String constructors)
Merge pull request #201 from gzm0/runtime-string

Forward methods on java.lang.String to dedicated implementation objects
java_lib lang.Math nextUp, nextAfter, ulp for Double
Merge pull request #198 from techaddict/test

java_lib math nextup nextafter ulp for double's
Fix #200: Enumeration fix was complaining about Enumeration implementation
Merge pull request #202 from gzm0/enumerations

Fix #200: Enumeration fix was complaining about Enumeration implementation
Remove definition of && in js.Any. Move to js.Boolean.

This is a small step in removing next-to-unsound definitions
in js.Any, without which the following commit breaks existing
code.
Add missing comparison ops to js.Number and js.Dynamic.
Unwrap JavaScriptException when it's thrown.

I.e., in
    throw e
if e.isInstanceOf[JavaScriptException], then e.exception
is thrown instead of e itself.

This restores transparency of the JavaScriptException when
it is rethrown to be catched by JavaScript code.
Fix #184: Add support for Throwable.printStackTrace().

Stack traces are captured when a new Throwable (or subclass)
is instantiated. JavaScriptExceptions capture their underlying
JS exception's stack trace instead of themselves. The trait
scala.util.control.NoStackTrace disables capturing the state
entirely, for efficiency, just like on the JVM.

When printStackTrace() or getStackTrace() is called (not before),
the stack traces are analyzed in a browser-dependent way, and
translated to an Array[StackTraceElement].