Add an async API

Just tracking Sue's work for now, this is not ready to commit.