Move to 2.10.4-RC3
Merge pull request #319 from gzm0/scala-2.10.4-RC3

Move to 2.10.4-RC3
Emit call graph information in .sjsinfo, for upcoming dce.

No dce is actually performed yet. This commit only emits the
necessary information.
Perform reachability analysis for dce.

The dce itself is still not actually done. The
preoptimizeJS task performs reachability analysis, from
which dce will be able to work to produce the optimized
output.
Write dce'ed output in preoptimizeJS based on reachability analysis.

Based on the reachability analysis introduced in the previous
commit, write a dce'ed output in preoptimizeJS. It includes
only classes, objects, methods and data that have been marked
as reachable by the analysis.

This completes the first version of the type-aware dead code
elimination.
Add .html files to run preoptimized versions of the examples.
Rewire optimizeJS to work on the output of preoptimizeJS.

This yields smaller optimized code (~25 % smaller for the
reversi), and in *much* less time (< 10 seconds).
Merge pull request #320 from sjrd/type-aware-dce

Type-aware dce
Replace a for-range loop by a while loop in javalib.

It was on the path of Predef.println(), which is worth
making not too slow. Besides, it was the only for-range
loop in javalib.
Merge pull request #325 from sjrd/while-loop-in-javalib

Replace a for-range loop by a while loop in javalib.
Fix #322: DCE eliminates equals__O__O__Z used by ScalaJS.anyEqEq.
Make dce report call stack when reaching non-existent method/class.
Better dce, making a difference between static/dynamic linking.

Most calls in Scala use dynamic linking, i.e., overrides in
subclasses are taken into account. A few call kinds use static
linking: constructor calls, and super calls (arguably, calls
to methods of impl classes also use static linking).

This commit refines the set of reachable methods by retaining
the difference between static linking and dynamic linking. For
example, in the snippet:

class Foo {
  def foobar = 42
}
class Bar extends Foo {
  override def foobar = 3
}
def doSomething(foo: Foo) = foo.foobar
doSomething(new Bar)

the method Foo.foobar can now be eliminated (but not Bar.foobar),
because the dce can tell that only Bar's are created (not Foo's),
and because foobar is overridden in Bar, the foobar in Foo can
never be called.

It can tell so because the call to foobar in doSomething() uses
dynamic linking. Previously it would have to keep Foo.foobar
because it thought that static linking was possible there,
effectively calling Foo.foobar although it is overridden in all
instantiated subclasses.
Hide most of the trace reporting of dce under 'last' command.

Because the full output is overwhelming.
Merge pull request #327 from sjrd/better-dce

Better dce
Fix #323: AssertionError when running scaladoc.

PrepJSExports referred to phase 'uncurry' for its behavior, but
that phase does not exist under scaladoc. Since the given
behavior is not essential for generating documentation, it is
simply disabled if forScaladoc is true.
Add packageDoc to the Travis build.

So that issues like #323 do not come back haunting us.
Merge pull request #328 from sjrd/fix-publishing

Fix #323: AssertionError when running scaladoc.
The sbt plugin must to be published separately

The sbt plugin is not aggregated by the root project anymore, because
the root project is cross-compilable but the sbt plugin is not. Thus to
publish a local version of scala.js you need to do both:

	> publishLocal

and

	> scalajs-sbt-plugin/publishLocal
Merge pull request #329 from jonas/sbt-publish

The sbt plugin must to be published separately