WIP: persisting local state in a widget

**DO NOT MERGE**

This is an idea on how to implement a widget with mutable local state.

The basic idea is that when you `initialState()` this widget you create some localState in an initial configuration and you mutate said localState based on whatever.

The the `render()` for this widget has access to localState including any events functions it can embed in the view.

Any events from localState embedded in the view can be listened to in the `initialState()` function and can be used to mutate `localState()`

When `localState()` is mutated a synchronous diff & patch will be applied. (this is not batched or frame skipped).

cc @Matt-Esch