lep: pull based event loop

I haven't really thought this through yet but I think it would be desirable to have an API where you can pull and dispatch one request at a time.

I'm not really sure what it should look like but here is a strawman for you to poke holes in:

```c
std::vector<uv_req_t*> low_prio_reqs;
while (req = uv_backend_next(loop)) {
  if (req->type == UV_READ || req->type == UV_WRITE)
    uv_backend_dispatch(req);
  else
    low_prio_reqs.push_back(req);
}
// now process low_prio_reqs
```

The idea being that the user can decide when to dispatch and in what order.  If, for example, you are aiming for low I/O latency, you give preferential treatment to read and write requests.  Whereas if you need high-precision timers, you run those at the first possible opportunity.

(To prevent tons of calls, we'd probably want to have a batch API where you tell libuv to give you N requests.  But hey, strawman, right?  It doesn't have to be perfect right away.)