make ReportMessage take a list of reporters instead of using globals

Having the global list of reporters is holding us back in PR #51.
@yiding is parallelizing test runs, buffering their reporter events
until the test is finished, and then flushing all the reporter events at
at the end.  In this case, we need the events from ReportMessage(...)
to feed into the BufferedReporters intead of sidestepping it and going
for the globals.

Tests pass, and via manual testing verified that reporter messages show
up correctly.