speed fixes

1. Create triggers for some update functions to ensure they are never called more than once per frame.
2. Cache tree items in `WidgetsTree` - the tree data will rarely change a significant amount, but currently all of the tree widgets are thrown away and recreated constantly. Instead, we can reuse these widgets.
3. Cache labels in `PropertyViewer` - especially handy since many of these labels are common to every widget.