Move reporting logic into Reporting trait

This stuff does not belong in Global/SymbolTable.
Should do the same for debugging/logging.

The idea is that CompilationUnit and Global forward all reporting
to Reporter. The Reporting trait contains these forwarders, and
PerRunReporting, which accumulates warning state during a run.

In the process, I slightly changed the behavior of
globalError in reflect.internal.SymbolTable.
It used to abort, but I don't think that's a good idea.
I couldn't find any call-sites for it (it was overridden in Global),
so I hope this is ok.

Provide necessary hooks for scala.reflect.macros.Parsers#parse.
See scala/reflect/macros/contexts/Parsers.scala's parse method,
which overrides the reporter to detect when parsing goes wrong.
This should be refactored, but that goes beyond the scope of this PR.

Don't pop empty macro context stack.
(Ran into this while reworking -Xfatal-warnings logic.)

Swat resurgence of -Xfatal-warnings turning warnings into errors.
Under this flag we should emit a single error when necessary to fail
a compile that emitted warnings. Warnings should stay warnings, though.

This was refactored in fbbbb22946, but we soon seem to have relapsed.
An hour of gitfu did not lead to where it went wrong. Must've been a merge.