give libuv a pull-style api