Implemented hooks and included rebinds

Hooks are for extensibility and module independence.

Rebinds will substantially reduce the amount of code and complexity to check for key events.