coroutine: new push/pull interface

svn path=; revision=84657