Allow optimizations remove single statement bodies.

JModVisitor would allow removing arbitrary statements from blocks,
but not allow removing single statements from While/Do/For when
not inside a block.

Bug: issue 8507
Change-Id: Id2086d044e68007f3a1d1e80520e98d7464e0454
Organizes/separates source, public, and build resource oracles.

Previously the process of scanning for resources in resource oracles
performed a dangerous liberal cross product of every registered path
prefix (from every resource oracle) with every class path entry (from
every resource oracle). This was silently resulting in combinations of
(resource path, class path) that the user never explicitly intended.
These accidentally included resources created hard-to-diagnose missing
resource failures in separate compilation. This bug has been fixed by
doing a separate resource scan per resource oracle.

Updates CompilerContext to automatically collect the proper combination
of moduleDef and libraryGroup resource oracles.

Removes or redirects (to the compilerContext) resource oracle accesses
that were trying to directly pull resource oracle instances out of a
moduleDef instance. There are still some of these references remaining
(for example in StandardGeneratorContext) but it won't hurt anything
until separate compilation is actually released. They will be fixed in
the next patch.

Adds a way to register a path in ModuleDef ("addResourcePath()") that
is ONLY for build resources. In the past these could only be
registered as combined source/build resource paths which was forcing
a lot of duplicate source inclusion between different .gwt.xml files.

Adds the beginnings of resource last modification date scanning, to
enable minimal incremental rebuilds by SuperDevMode.

Change-Id: I948b8feaa5729ca5c02219cfe393be86e247f5b7
Review-Link: https://gwt-review.googlesource.com/#/c/5972/
Merge remote-tracking branch 'upstream/master'