Add new asynchronous interface

Add new module Reporter, which allows us to create values of type
reporter which can run asynchronously until we want to cancel them.

The interface of the Common functor is largely unchanged, but
internally it now makes use of the Reporter interface.
Yea, I see what you mean...I'll try to tidy it up.