Completes Challenge 2

* Exports additional symbols from Challenge 1
Completes Challenge 3

Produces a best guess for decrypting the test case based on scoring by
number of A-Za-z0-9 ASCII characters.

Could be improved by scoring based on incidence of characters weighted
against table of letter frequencies. E.g., e = 1.3, t=9.1, &c
Solves Challenge 4

Adds a dependency on containers for fast element lookup with defaulting
via Data.Map.

Adds 4.txt, the list of potential cryptograms for the challenge.

Execution of ./Matasano now takes a noticeable amount of time (sub
1-second still). Possible TODOs:
* Add compiler optimization flags
* Add profiling and figure out how to make execution faster
** Probably: [Word8] ---> ByteString
** There are some algorithmic inefficiencies, e.g. readHex is very
   conservative in case a string with an odd number of hex digits is
   passed through. That's probably a needless overcomplication.
* Add command line argument parsing to only run tests for current
  challenge.