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