Refactoring

This branch enables all ghc warnings and makes warning fatal errors!