Refactors reporters

Reporters now inherit from a prototypical reporter, and they implement the composite pattern: a single reporter or a chain (or tree) of reporters have the same interface.