Completely redid JavaTreeParser.g.

There's an ugly hack marked clearly with /* XXX(n) ('...') */ to temporarily
work around awkwardness in if-then-else branching.

One solution that springs to mind is to have statements and blocks be different
return types (currently everything is a String) and use instanceof() to tell
whether we should follow an expression with a semicolon or not, but that
probably isn't right because it's awkward to subclass.