Fix definitions of operators on js types.

This basically solves soundness issues by removing a lot
of definitions from js.Any, and move them down to specific
subtypes. For example, && and || are restricted to Booleans,
and unary + - ~ are restricted to Numbers.

Although JavaScript guarantees that +x will return a number
for any type of value x, Scala.js should not consider this
to be type-safe. Note that +x is still allowed on js.Dynamic,
and returns a js.Number. The same reasoning applies to other
operators.

This also adds the comparison operators to js.Number and
js.Dynamic.
Merge pull request #210 from sjrd/fix-js-operators

Fix definitions of operators on js types.
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].
Merge pull request #223 from sjrd/stack-traces-reloaded

Stack traces reloaded
Fix #211: java.util.Formatter does not support `n` conversion
Fix #228: Add primitive js.debugger() mapping to debugger statement.
Merge pull request #229 from sjrd/equivalent-to-debugger

Fix #228: Add primitive js.debugger() mapping to debugger statement.
Merge pull request #230 from sjrd/fix-n-format

Fix #211: java.util.Formatter does not support `n` conversion
Add Scala.js specific scala.Symbol implementation

The cache that scala.Symbol uses to maintain symbol instances depends on
java.util.WeakHashMap and java.util.concurrent.locks.ReentrantReadWriteLock
which are neither supported and don't make sense for JavaScript.

Replace scala.Symbol's cache implementation with a simple js.Dictionary
backed cache to fix runtime issues, such as:

    [error]     TypeError: org.mozilla.javascript.Undefined@1221f81 is not a function, it is undefined. in
    [error] @file:///.../scala-js/scalalib/source/src/library/scala/Symbol.scala:48
    [error] @file:///.../scala-js/scalalib/source/src/library/scala/Symbol.scala:34
Fix #225: provide an equivalent of JS' `typeof x`.

It is introduced as `js.typeOf(x)`.
Merge pull request #236 from sjrd/equivalent-of-typeof-in-package

Fix #225: provide an equivalent of JS' `typeof x`.
Merge pull request #234 from jonas/js-symbol-cache

Add Scala.js specific scala.Symbol implementation
Add implementation for String.equalsIgnoreCase

Also adds missing tests for String.compareToIgnoreCase.

Fixes #233
Merge pull request #235 from jonas/string-equalsignorecase

Add implementation for String.equalsIgnoreCase