use cabal to build executable

This uses cabal to build, cleans up some -Wall warnings, and adds a few obvious performance fixes (although using ByteString everywhere may be a better solution). There are some lingering correctness issues such that it's possible to type in a word that's not close enough to one that's already in the map and you'll get an exception (choices and chooseBest need to be refactored appropriately).
@fffej said he probably introduced a bug here https://github.com/MarcoSero/Norvigs-Spelling-Corrector/commit/3eacf71e56b1959aee61a4189f6f9b541d2cd215#commitcomment-9052210
I can't try the code right now (no internet access from my laptop). @etrepum have you seen the issue as well?