There is a standard API for allowing a wider range of async mechanisms, including the upcoming built-in coroutine support and call backs -- for those mad enough to want them :)
@vinniefalco has offered to help advise on this, so I"m obviously going to take him up on his kind offer. I've already got a branch where I've started to put together some tests, so I think converting the call stack that handshake uses is probably a good place to start, as per his suggestion.