Encapsulate reporting mode as class of reportBuffer.

Reporting mode used to be governed by contextMode.
This logic is left in place by this commit, and the consistency
of the new and the old is checked. Will be removed in follow-up commit.

The main difference is that we no longer throw TypeErrors in buffering mode.
There was one instance of context.error in implicit search the exploited the
fact that implicit search runs in buffering (silent) mode and thus calls to
error(pos,msg) used to throw new TypeError(pos, msg) -- made this explicit,
and removed throwing behavior from the buffering context reporter.
Remove dead code: mode setting
s/reportBuffer/reporter
simplify trytwice

tests pass
cleanup ContextReporter hierarchy (+3 squashed commits)
Squashed commits:
[2e23bb7] comment

tests pass: https://scala-webapps.epfl.ch/jenkins/job/scala-checkin-manual/1288/consoleFull
[fd069dc] just return unit
[1ada008] wip: refactor
immediacy