#19: Create UiWidget layer
* improved getValue/validation stuff for optimal performance
* added UiMode.isEditable() for better extendability
* support for dynamic mode visibility of buttons