Option parsing

A more structured option parser:
- uses GetOpt to parse options and generate the help screen
- gives proper error message for invalid options (instead of just defaulting to generating haskell, closes #25)
- changes the type and the name of some of the backends for more uniformity