Change the reporter.done() calling convention

Previously I implemented a no-op done() method in the Base reporter class.
This is a slight simplification to make the caller responsible for checking
whether the done() method exists and only call it if it does.

The main benefit is that if a reporter class is used that doesn't actually
inherit from Base but simply implements the expected API then it will still
work even after merging the change.