separate the version code from the rest

the magic cabal module is causing issues with doctest.

I had to change RunTests because this made the locking code fail?? There
must be a race condition in the testing code, will check some other
time.
a monad for warnings and errors
singular Mode

Instead of "Modes". It feels strange for me to have a plural type name.
remove unused option ignoreErrors
remove unused option keepGoing
add missing file

should have been included in c526004f1af3a4b93337f30452bf1d1660dbdc08
remove accidentally-added Spec datatype
a monad for parsing options
Spec, a more precise type for Hawk's arguments

Not used yet.
exclusive flags
non-option arguments
better error message for unreadable options
Hawk's options in OptionParser format
remove '|' to prevent doctest confusion
swap ExprSpec and InputSpec

To match the order in which the arguments are expected on the
command-line. This makes it slightly easier to parse said arguments.
parsing HawkSpec from command-line arguments
add tests to Args.Parse
extract the 'not-options'
a way to run Uncertain without terminating

also, the doctests were giving the wrong example: don't call "error",
call "fail" instead.
phase1: HawkSpec as an intermediate representation

This refactoring is taking longer than expected, so I am staging its
deployment. This is the first phase, in which HawkSpec is used at the
very beginning of the program to parse the arguments, and then
immediately afterwards the old format is recovered from the HawkSpec and
the rest of the program continues as before.