Error handling for defect backups

`backup-rotate` should now detect defect backups and ignore them,
printing an error message. A 'defect' backup is any backup whose `date`
file cannot be read for whatever reason. Note that the actual
move/remove operations are still unprotected and will crash the program
if anything goes wrong.

Additionally, this commit includes another bunch of minor code
improvements.
Separates types and error handling from Main file

Types and errors now have their own modules in order to further improve
the readability of Main.hs. Also lots of additional code beautification
in Main.
Merge branch 'error-handling'

Error handling framework is in place and the most annoying error dealt
with. Other I/O errors will probably not require handling, since
the script immediately bailing out is exactly what we want.
Import cleanup, -Wall -Werror now compiles

Corrects all issues that caused warnings with -Wall, chief among them
redundant imports. Import clauses now also specify the imported
functions if we only need small parts of a module.
README update to reflect new error handling

Updates the README with information on the one error that we currently
handle (where a `date` file cannot be read) and how we deal with it.
Cabal default-language attribute

Adds a `default-language` attribute to the Cabal file's executable
section in order to avoid the corresponding build time warning.