added keyboard subsystem
hooked up key press/release events
reworked channel broadcast as a static method