Callbacks now use any monad, should help testing with #3

Mouse callbacks and the keyboard callbacks were moved into their
own internal modules to allow for testing.

They were also made to be used by any monad, then made specific to
IO in Hate.hs
Added basic tests mouse and keyboard callbacks. Fixes #3.

The tests check to make sure that the user passed function for
updating after a mouse or keyboard event is actually used.
Split callback tests according to valid and invalid events

Since Hate doesn't pass on every keyboard press, only a select
amount, tests have been added to make sure that callbacks aren't
called with invalid keys.

Same with the mouse buttons
Broke tests out into their own files
Merge pull request #4 from chanko08/sdl-callback-tests

Sdl callback tests. Fixes #3