Unified API for Async

Not quite finished yet, but this is pretty close to done, though I won't merge it immediately.