Refactor formatters to use notification objects.

Part deux of my formatter changes is to send value objects (which I'm calling notifications) from the reporter and use them in the formatters. This will give us the flexibility to softly extend these notifications in future as every event takes a notification even if they don't use them. This means if we wish to extend functionality in a future release we can do so without making a breaking change to the method signature.

To continue on from here I want to refactor some of the bits currently lying in the base formatter into these objects (e.g. summary line) so we can have a clearer distinction of responsibility.

I'm opening this now to get early feedback on the general direction.

When this is done we can ship beta2, but there are a few other open PRs surrounding feature requests to do with reporter/formatters that I want to utilise this to implement before rc/final.