add component state management methods

ian.ui.Component#getState(): ian.ui.ComponentState
ian.ui.Component#setState(ian.ui.ComponentState)
ian.ui.Component#setState(string, boolean)
ian.ui.Component#toggleState(string)

Components emit "statechange" events on each mutation of their state objects. The compiler listens for these events and handles the required DOM mutation step during which element class names need to be added/removed.
merge
map child components to component#children