Tim indicated that then thread model where the
async impl gets the deferred from the async service
is error prone. It is easy to call a mediated
service and call a non-async method. However,
this method could call more methods where one
of them would think that the invocation was
static. This is both advantageous (it allows
parties down the stack to collaborate) and bad
because it is error prone.

This commit changes the Async service to be based
on an ASyncDelegate interface. Services that implement
this interface get the option to do something
async. If they do not opt in, the function is
executed sync and an immediate promise is returned.

The impl. became significantly simpler and it is now
less error prone because it is more direct. I.e.
I was wrong with the proposal to use a current
thread model.