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].