Grid causes segfaults when updating the state after an event
## Description
When rendering a grid with a checkbox in it and then clicking on the checkbox, you get a segfault

## Minimal example:
1. Run this:
```nim
import owlkettle

viewable App:
  discard

method view(app: AppState): Widget =

  result = gui:
    Window():
      Grid():
        CheckButton() {.x: 2, y:5.}:
          state = true
          proc changed(state: bool) =
            echo "Potato"

brew(gui(App()))
```

2. click on the checkbox

## Stacktrace
```txt
Traceback (most recent call last)
/home/philipp/dev/playground/src/playground.nim(16) playground
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle.nim(180) brew
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/mainloop.nim(55) runMainloop
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgets.nim(1488) toggledCallback
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetutils.nim(31) redraw
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetdef.nim(79) redraw
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetdef.nim(52) update
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetdef.nim(525) update
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgets.nim(149) updateState
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetutils.nim(112) updateChild
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetutils.nim(84) updateChild
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetdef.nim(52) update
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetdef.nim(525) update
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgets.nim(2318) updateState
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgets.nim(2264) attach
/home/philipp/.nimble/pkgs/owlkettle-#head/owlkettle/widgetdef.nim(73) unwrapInternalWidget
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
```

## Further information
The last 2 procs that are being called are:
```nim
proc attach(grid: GtkWidget, child: GridChild[WidgetState]) =
  gtk_grid_attach(grid,
    child.widget.unwrapInternalWidget(),
    child.region.x.cint,
    child.region.y.cint,
    child.region.width.cint,
    child.region.height.cint
  )
```
which calls
```nim
proc unwrapInternalWidget*(state: WidgetState): GtkWidget =
  result = state.unwrapRenderable().internalWidget
```

It appears that the state has become nil and "unwrapRenderable()" deals with that by also responding with nil have become nil somehow during the update-cycle (?).

With a modified "unwrapInternalWidget" proc :
```nim
proc unwrapInternalWidget*(state: WidgetState): GtkWidget =
  echo "A"
  echo state == nil
  echo "B"
  echo state.unwrapRenderable() == nil
  echo "C"
  result = state.unwrapRenderable().internalWidget
  echo "D"
  ```
You will get these results when running and then clicking the checkbox
```txt
A
false
B
false
C
D
A
false
B
false
C
D
A
false
B
false
C
D
A
false
B
false
C
D
------ CLICK -------
Potato
A
false
B
false
C
D
A
true
B
true
C
```

Why am I assuming this is heavily Grid related? If you try this with box it will work as expected:
```nim
import owlkettle

viewable App:
  discard

method view(app: AppState): Widget =

  result = gui:
    Window():
      Box():
        CheckButton():
          state = true
          proc changed(state: bool) =
            echo "Potato"

brew(gui(App()))
```