Merge pull request #304 from sjrd/java-util-comparator

Add java.util.Comparator.
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 with class-level granularity.

Although the analysis in the previous commit has a method-level
granularity, this commit only uses the class-level info to decide
whether or not to include an entire class.
Write dce'ed output with method-level granularity.

This completes the first version of the type-aware dead
code elimination.
Temporary commit to test dce with the examples.

helloworld/preoptimizeJS
and
reversi/preoptimizeJS
will run only the type-aware dce on the respective examples.
The pages {helloworld,reversi}-2.10-preopt.html execute this
pre-optimized version.

helloworld/optimizeJS
and
reversi/optimizeJS
run the Closure compiler on the result of preoptimizeJS rather
than packageJS. The fun thing is that it is virtually no slower
than running only packageJS (at least on my Windows machine at
home).