Support route decorators for mounts
### Discussed in https://github.com/HapticX/happyx/discussions/332

<div type='discussions-op-text'>

<sup>Originally posted by **jerrygzy** August 25, 2024</sup>
after some time, I have found two approaches.

`method 1`,  this method does not use app object, which means, it's hard to pass app object to render function.
```nim
import happyx

proc renderIndex(): string =
  return " default client"

proc renderLogin(): string =
  return " login client"

mount Clients:
  "/":
    renderIndex()
  "/login":
    renderLogin()

serve "127.0.0.1", 5000:
  # Mounts
  mount "" -> Clients
  # Pages (docs)
  get "/{title:string}":
    req.answerHtml render(title)
  # Static Files
  staticDir "/download" ->  "public" 


```


`method 2`, this method use app object, but can only work under [setup:] which does not work with Decorator
```nim
# define app object
type
    MyApp* = object
        pwa: bool  
        name: string

# Object Method Mount
proc doMount(app: MyApp) =
  "/" -> get:
    " $#  | default client" % app.name
  "/login" -> get:
    " $#  | login client" % app.name

serve "0.0.0.0", 80:
  setup:
    # Create app 
    let app = MyApp(pwa:false, name: "happyx")
    # Mount
    app.doMount()

  # Pages (docs)
  get "/{title:string}":
    req.answerHtml render(title)
  # Static Files
  staticDir "/download" ->  "public" 

```

Note: for Decorator, `method 1` only apply the last route, `method 2` does not work

```nim
proc myCustomDecorator*(httpMethods: seq[string], path: string, statementList: NimNode, arguments: seq[NimNode]) = 
  # This decorator will add
  #   echo "Hello from {path}"
  # as leading statement in route at compile-time
  statementList.insert(0, newCall("echo", newLit("Hello from " & path)))


# Register our decorator
static:
  regDecorator("OurDecorator", myCustomDecorator)
```

`method 1`  only apply the last route
```nim
...
@OurDecorator
mount "" -> Clients
...
```
`method 2`  does not work
```nim
...
    @OurDecorator # this does not work
    app.doMount()
...
```


</div>