more work on the async API to allow aborting async operations

(still in progress)