Asynchronous programming helpers

Futures and promises. The API is orthogonal to the execution strategy (same thread, another thread, an executor, etc).