Refactoring

This branch enables all ghc warnings and makes warning fatal errors!
I'd probably make this `-Wall`, but it will almost certainly require another pass over the code :)