use strategy pattern for context's reporterbuffer

leave mode bits in for now, and checking consistency

TODO: failing for quick.lib:

 error: java.lang.AssertionError: assertion failed:
 	at scala.tools.nsc.typechecker.Contexts$Context.reportBuffer(Contexts.scala:334)
 	at scala.tools.nsc.typechecker.Contexts$Context.make(Contexts.scala:495)
 	at scala.tools.nsc.typechecker.Contexts$Context.make(Contexts.scala:525)
 	at scala.tools.nsc.typechecker.Contexts$class.scala$tools$nsc$typechecker$Contexts$$startContext(Contexts.scala:52)
 	at scala.tools.nsc.Global$$anon$1.scala$tools$nsc$typechecker$Contexts$$startContext$lzycompute(Global.scala:448)
 	at scala.tools.nsc.Global$$anon$1.scala$tools$nsc$typechecker$Contexts$$startContext(Global.scala:448)
 	at scala.tools.nsc.typechecker.Contexts$class.resetContexts(Contexts.scala:126)
 	at scala.tools.nsc.Global$$anon$1.resetContexts(Global.scala:448)
 	at scala.tools.nsc.typechecker.Typers$class.resetTyper(Typers.scala:53)
 	at scala.tools.nsc.Global$$anon$1.resetTyper(Global.scala:448)
 	at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.<init>(Analyzer.scala:85)
 	at scala.tools.nsc.typechecker.Analyzer$typerFactory$.newPhase(Analyzer.scala:83)
 	at scala.tools.nsc.typechecker.Analyzer$typerFactory$.newPhase(Analyzer.scala:76)

TODO:
diff --git a/test/files/neg/interop_typetags_without_classtags_arenot_manifests.check b/test/files/neg/interop_typetags_without_classtags_arenot_manifests.check
index ba744a8837..64dc75b9bf 100644
--- a/test/files/neg/interop_typetags_without_classtags_arenot_manifests.check
+++ b/test/files/neg/interop_typetags_without_classtags_arenot_manifests.check
@@ -1,6 +1,4 @@
-interop_typetags_without_classtags_arenot_manifests.scala:6: error: to create a manifest here, it is necessary to interoperate with the type tag `evidence$1` in scope.
-however typetag -> manifest conversion requires a class tag for the corresponding type to be present.
-to proceed add a class tag to the type `T` (e.g. by introducing a context bound) and recompile.
+interop_typetags_without_classtags_arenot_manifests.scala:6: error: No Manifest available for T.
     println(manifest[T])
                     ^

check file: more errors reported
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