Add some GUI abstractions to allow for more flexible API

Signed-off-by: Walker Crouse <walkercrouse@hotmail.com>
Add input events

Signed-off-by: Walker Crouse <walkercrouse@hotmail.com>