Configurable Keyboard Input

Added a way to change the keymappings and configure custom keyboard
input based on keycodes and header enum values
Merge remote-tracking branch 'origin/Keyboard-Input'