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.
Can this function and the one above be combined? there's a fair bit of repeated code.