Reporter is now a singleton that auto-detaches.

A reporter instance is now stored as a singleton. If the task is called
for a second time, the existing reporter is detached from the events
system before a new one is attached.
Add test framework and tests.

Add a way of testing the plugin, using a new test framework that can
generate arbitrary Grunt tasks for a list of test suites.