Unclutter Reporter. Move truncation to ReplReporter.

Refactor to reduce the Reporter interface. Working towards
minimal interfaces in scala.reflect.internal that can be consumed by sbt/IDE/....
The scala.tools.nsc package is entirely private to the compiler (in principle).

A `Reporter` should only be used to inform (info/warning/error). No state.
Ideally, we'd move to having only one reporter, whose lifetime is adjusted
appropriately (from per-run in general to per-context for type checking,
so errors can be buffered -- "silenced" -- during nested type checking calls).

Start the clean up by moving truncation to the REPL,
since it's not relevant for regular reporting. Perversely, we were checking
truncation all the time, even though it's only on during a repl run.
(Truncation is now always turned off in the repl under -verbose.)

Untangle error resetting on symbols from error reporting (reportAdditionalErrors).
This fixes a nice&subtle bug that caused feature warnings to be suppressed under
`-Xfatal-warnings`:

```
def reportCompileErrors() {
  if (!reporter.hasErrors && reporter.hasWarnings && settings.fatalWarnings)
    globalError("No warnings can be incurred under -Xfatal-warnings.")

  if (reporter.hasErrors) { ... }
  else {
    // will erroneously not get here if
    // `reporter.hasWarnings && settings.fatalWarnings`
    // since the `globalError` call above means `reporter.hasErrors`...
    allConditionalWarnings foreach (_.summarize())
    ...
  }
}
```

The second `if`'s condition depends on the `globalError` call in the first `if`...
Pure refactor: reorder definitions
Move reporting logic into Reporting trait

Move code from Global/SymbolTable to separate Reporting traits to
start carving out an interface in scala.reflect.internal.Reporting,
with internals in scala.tools.nsc. Reporting is mixed into the cake.
It contains a nested class PerRunReporting.

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, weirdly.
I assume that was dummy behavior to avoid introducing an abstract method.
It's immediately overridden in Global, and I couldn't find any other subclasses,
so I don't think the behavior in SymbolTable was ever observed.

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.)

Fix -Xfatal-warnings behavior (and check files): it wasn't meant to
influence warning reporting, except for emitting one final error;
if necessary to fail the compile (when warnings but no errors were reported).
Warnings should stay warnings.

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.
Uniformly route reporting through reporter.

Sharpen interfaces, reduce footprint of Reporting trait.
Ideally, all reporting should indirect through reporter,
and the `Reporting` trait itself should be restricted to
a single method that retrieves the current `reporter`.

Pull up some more reporting to reflect.internal.
Would like to do more, but need to move partest to the
reflect.internal interface first.
(Its `errorCount` relies on `ERROR.count` in `tools.nsc.Reporter`.)
Track symbol that caused a deprecation warning.

So that we can filter deprecations based on defining package.

Configurable error reporting will support a rule like:
"In compilation unit X, escalate deprecation warnings that
result from accessing members in package P that have been deprecated
since version V. Report an error instead of a warning for those."

TODO: remove deprecationWarning overload that doesn't take a `Symbol`?
(Replace by a default value of `NoSymbol` for the deprecated symbol arg?)
Route type checker reporting through context

Continue the work started in SI-8450
(no "implicit numeric widening" warning in silent mode),
which was caused by going straight to the reporter instead of
using the context for type error reporting (which buffers in silent mode).

Ideally, this mistake should not be possible: typer should change
the current reporter to buffer where appropriate.
Rip out reporting indirection from CompilationUnit

Inline the forwarders from CompilationUnit, which should not affect behavior.
Since all forwarders lead to global.reporter, don't first navigate
to a compilation unit, only to then forward back to global.reporter.

The cleanup in the previous commits revealed a ton of confusion
regarding how to report an error.

This was a mechanical search/replace, which has low potential for messing
things up, since the list of available methods are disjoint between
`reporter` and `currentRun.reporting`. The changes involving `typer.context`
were done previously.

Essentially, there are three ways to report:
  - via typer.context, so that reporting can be silenced (buffered)
  - via global.currentRun.reporting, which summarizes (e.g., deprecation)
  - via global.reporter, which is (mostly) stateless and straightforward.

Ideally, these should all just go through `global.currentRun.reporting`,
with the typing context changing that reporter to buffer where necessary.

After the refactor, these are the ways in which we report (outside of typer):
  - reporter.comment
  - reporter.echo
  - reporter.error
  - reporter.warning
  - currentRun.reporting.deprecationWarning
  - currentRun.reporting.incompleteHandled
  - currentRun.reporting.incompleteInputError
  - currentRun.reporting.inlinerWarning
  - currentRun.reporting.uncheckedWarning

Before:
  - c.cunit.error
  - c.enclosingUnit.deprecationWarning
  - context.unit.error
  - context.unit.warning
  - csymCompUnit.warning
  - cunit.error
  - cunit.warning
  - currentClass.cunit.warning
  - currentIClazz.cunit.inlinerWarning
  - currentRun.currentUnit.error
  - currentRun.reporting
  - currentUnit.deprecationWarning
  - currentUnit.error
  - currentUnit.warning
  - getContext.unit.warning
  - getCurrentCUnit.error
  - global.currentUnit.uncheckedWarning
  - global.currentUnit.warning
  - global.reporter
  - icls.cunit.warning
  - item.cunit.warning
  - reporter.comment
  - reporter.echo
  - reporter.error
  - reporter.warning
  - reporting.deprecationWarning
  - reporting.incompleteHandled
  - reporting.incompleteInputError
  - reporting.inlinerWarning
  - reporting.uncheckedWarning
  - typer.context.unit.warning
  - unit.deprecationWarning
  - unit.echo
  - unit.error
  - unit.incompleteHandled
  - unit.incompleteInputError
  - unit.uncheckedWarning
  - unit.warning
  - v1.cunit.warning

All these methods ended up calling a method on `global.reporter`
or on `global.currentRun.reporting` (their interfaces are disjoint).

Also clean up `TypeDiagnostics`: inline nearly-single-use private methods.
Remove deprecationWarning, currentReporting from Reporting

This moves us a bit closer to the goal of having a single
entry point to reporting.

Must modularize Reporting a bit so it can be used in Variances
(need a reference to `currentRun` in `reflect.internal.Reporting`).
Encapsulate deprecation warning message synthesis.

Both refchecks and typer constructed the same message. But different.
Now with more DRYness.

Note that no check files had to be updated (disconcerting)...
Use countElementsAsString for summarized warnings.