Same as unbound_async_call, but with an engine API. The engine
is initially in state `Working 0. When the call is finished, the
engine transitions to `Done r where r is the response value.
If an error happens, it transitions to `Error e where e is the
exception.

One can abort the engine, but one caveat: This does not stop
the transmission of the current message (the underlying RPC transporter
doing this is not aborted). Aborting can only prevent that a
message is sent before it is sent, and it can remove the call from the
housekeeping data structures before the response arrives. Of course,
one can shut the client down to achieve immediate stop of data
transmission.