Let activities send "requests" to the engine.

The engine must handle the requests and supply tokens in response. Sending a
request to the engine acts a bit like a "yield" or asynchronous IO, to give a
chance to the engine to run another workflow concurrently, while the request is
off-loaded.