self-consistency and scope with components 🐛
We'd expect `self` to always refer to the same thing when declaring components, but this is not true. Sometimes `self` can't be accessed, or comes out as undefined. Sometimes, as in method calls, `self` comes out as type BaseComponent and is hence not ready for the component fields to be accessed.

Consider the following code:

```

component CTestChild:
  id: int
  color: cstring
  `template`:
    tDiv(style=fmt"color:{self.color}"):
      "subcomponent ID: {self.id}"

var ctest1 = use component CTestChild(id=1, color = "green")

component CTest:
  id: int
  newId: int = id + 1
  # testChild: CTestCHild = CTestChild(id = 44, color = "purple")
  ### won't compile
  # newId: cstring = fmt"newId: {id}"
  ### compiles but fails to render app
  message: cstring = ""
  `template`:
    tDiv: "template: {self.id} {self.newId}"
    tDiv: "message: {self.message}"
    tButton:
      "log id"
      @click:
        console.log(self.id)
    tButton:
      "get Id"
      @click:
        # self.message = fmt"{self.id}"
        ### won't compile
        # self.message = fmt"{CTest(self).getId()}"
        ### compiles but message is undefined
        self.message = fmt"{CTest(self).id}"
    component CTestChild(id = 3, color = "red")
    component CTestChild(id = self.id.val(), color = "blue") # undefined
    #component CTestChild(id = self.id, color = "blue") # same as above
    component ctest1 # compiles but causes weird duplications on rerender with above
  [methods]:
    proc getId(): int = self.id.val()

var test1 = use component CTest(id= 1)

appRoutes("ROOT"):
  "/":
    tDiv: component test1
    tDiv: component CTest(id = 7)


```

1.  It's inconsistent when one can use fields that have been declared to define new fields. Somewhat strangely, `self` cannot yet be used to refer to them, but they are part of the 'global' scope. However field values don't interact well with macros like `fmt` when defining a new field.
2. Methods apparently can't be called with self in @click assignments, but presumably break on the `js` end.
3. Sub-components apparently can't be initialiized with fields from self in the component template, nor can they be defined by default as a component field. This limits the ability to make modular code that limits the scope of rerenders, enhances code safety, or works in line with the `Nim`-ish philosophy of writing object oriented code that relies mostly on object composition as opposed to class inheritence.

- [x] `use component` rerender bug
- [x] `self.FIELD` as component param
- [x] `@click` scope
- [x] parameters calculating
