Initial work at fixing StateT issue (#63)

Here's what I've done so far. There is 1 type error. Turns out to do this properly, the game render loop mess needs to be rearranged quite a bit.

Everything here (line 132):
```
(pixels, pitch, texture, w, h) <- Cairo.liftIO ....
```
needs to be in the game loop inside IO. We actually need `Cairo.renderWith` on line 152 to wrap everything so we can evalStateT and get the same type as defined for `Helm`.

WARNING: DO NOT MERGE YET THIS WILL BREAK THE BUILD.