do not hijack poll loop
currently app.run calls `waitFor` to drive async handlers.
This prevents user to run other async code.
My proposal is to give users the option to drive their own async poll loop.

This is not possible right now:

```nim

# app.nim
import prologue


proc hello*(ctx: Context) {.async.} =
  resp "<h1>Hello, Prologue!</h1>"

proc someOtherAsyncWork() {.async.} =
  while true:
    echo "some other async work"
    await sleepAsync(1_000)

let settings = newSettings()
var app = newApp(settings = settings)
app.addRoute("/", hello)
asyncCheck someOtherAsyncWork()
app.run()

```

I think something like this should be possible:

```nim 
# app.nim
import prologue


proc hello*(ctx: Context) {.async.} =
  resp "<h1>Hello, Prologue!</h1>"

proc someOtherAsyncWork() {.async.} =
  while true:
    echo "some other async work"
    await sleepAsync(1_000)

let settings = newSettings()
var app = newApp(settings = settings)
app.addRoute("/", hello)
asyncCheck someOtherAsyncWork()
waitFor app.runAsync() # maybe introduce runAsync? or make `run` multisync?
```