`withTimeout`, `withPromise`, etc as helpful macros for SPA 🔥
## Examples

### With Timeout
`withTimeout` is a special macro designed to simplify the usage of `setTimeout` from JS.
Documentation for `setTimeout`: [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/setTimeout)
```nim
withTimeout 500, t:
  # some Nim code here
  clearTimeout(t)
```

### With Interval
`withInterval` is a special macro designed to simplify the usage of `setInterval` from JS.
Documentation for `setInterval`: [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/setInterval)
```nim
withInterval 500, t:
  # some Nim code here
  clearInterval(t)
```

### With Promise
`withPromise` is a special macro designed to simplify the usage of `new Promise(...)` from JS. Documentation for `Promise`: [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise)
```nim
var result = await:
  withPromise res:
    withTimeout 500, t:
      clearTimeout(t)
      {.emit: "res(true)".}
```

### With Variables
`withVariables` macro is used for passing variables to `withTimeout`, `withInterval`, `withPromise`.
Usage example:
```nim
var x = 10
var i = 100
withVariables x, i:  # you can pass 1 or more variables
  withTimeout i, t:  # use i as timeout
    x += 150
    echo x
    clearTimeout(t)
  echo x
```

## Other
`clearTimeout`, `clearInterval`, and `await` functions have been added.