Added keyboard event loop and event hdlrs

- All widgets now get an id on creation.
- Keyboard input is done on it's own worker thread.