Move more Keyboard related stuff to Keyboard module

Make cleanMask functional, replace Monad version with getCleanMask
Reorder function arguments
Use separate list for special keys
Use Type classes to get rid of conversion functions all over the place
Generalize window module on MonadIO
Start implementation of a component based approach
First approach at Core component for managing windows
First approach on Button component for pointer/button events
Generalize getCleanMask on Monad
Function to retrieve ModMask for special keys
Use extraModifier function to get additional mask keys
Use Maybe instead of data constructor "None"
Provide some default values for Position, Dimension & Geometry
stash
Revert "stash"

This reverts commit c89835aa08fd2ea7022f7a136a557f03c79d08ae.
stash
Revert "stash"

This reverts commit e8027d39c07e6ea188f4e1cc4d919c974c6d80e0.
Generalize toLog & provide simple log pretty printer
Remove useless import
Provide additional type conversion instances