Separate data & ui components

* Move all DOM manipulation to UI component
* Use data events to communicate data to ui
* Use this.select instead of $('selector')