use strategy pattern for context's reporterbuffer

leave mode bits in for now, and checking consistency

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