Better support for `nim-result`
When working inside of chronos async procs, the `?` control flow doesn't seem to work as it does with normal synchronous procs. The end result is that when inside of a chronos async proc, we cannot use the `?` template, and control flow suffers, being forced to check for an error condition, and return the resulting error, ie `if myResult.isErr: return err myResult.error`.

Consider the following:
```nim
import # vendor modules
  chronos, stew/results

type
  Asset* = object
    name*: string

  OpenSeaError* = enum
    FetchError    = "opensea: error fetching assets from opensea"

  OpenSeaResult*[T] = Result[T, OpenSeaError]
```

The following compiles and runs successfully:
```nim
proc queryAssets(): Future[OpenSeaResult[seq[Asset]]] {.async.} =
  return ok(@[Asset(name: "asset1")])

proc getAssets*(limit: int): Future[OpenSeaResult[seq[Asset]]] {.async.} =
  let assets = await queryAssets()
  if assets.isErr: return err assets.error
  return ok assets.get

let assets = waitFor getAssets(50)
assert assets.isOk
assert assets.get.len == 1
assert assets.get[0].name == "asset1"
```
However, if we switch over to the preferred control flow of `nim-result` by using the `?` operator, like this:
```nim
proc getAssets*(limit: int): Future[OpenSeaResult[seq[Asset]]] {.async.} =
  let assets = ?(await queryAssets())
  return ok assets
```
then it fails to compile with the following compilation error:
```
vendor/nim-stew/stew/results.nim(665, 14) Error: type mismatch: got <OpenSeaResult[seq[Asset]]> but expected 'FutureBase = ref FutureBase:ObjectType'
```
This code can be cloned and run: https://github.com/emizzle/nim-test-env/blob/master/src/result_chronos.nim
```
make -j8 update && make result_chronos
```