Fix #195: Reflective calls on primitive value types

Implement methods on Scala primitive values types in corresponding
Java boxes.
Make reflective calls on scala.Array work
Make reflective calls on js.String work
Make the path of the output of optimizeJS configurable.

Exactly in the same way that paths of the outputs of
packageXyzJS are configurable, i.e., through
(moduleName in optimizeJS), (crossTarget in optimizeJS) and
(artifactPath in optimizeJS).
Fix #204: Restrict ancestors of classes extending js.Any
Merge pull request #208 from sjrd/customize-opt-js-output

Make the path of the output of optimizeJS configurable.
Remove js.Function.apply().

Its name clashes with the meaning of apply in Scala, and call()
can be used instead with the :_* notation.
Protect receiver of reflective call from double evaluation
Merge pull request #206 from gzm0/js-any-inheritance

Fix #204: Restrict ancestors of classes extending js.Any
Merge pull request #209 from sjrd/remove-jsfunction-apply

Remove js.Function.apply().
Merge pull request #205 from gzm0/fix-reflective-calls

Fix reflective calls
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.