Added haskell-yas.el
Remove redundant forward-`defvar`
Simplify flymake autoload hacks by `(require 'flymake)`

Flymake has been part of Emacs since version 22, so we can safely
depend on flymake.el being initialized before haskell-mode.el is
loaded. This also fixes a byte-compile warning occuring with recent
Emacs snapshots.
Add missing "provide" to haskell-menu.el
Add `haskell-customize` command and update README

This is inspired by org-mode's org-customize convenience command which
provides a smooth user experience by making sure all modules have been
loaded before opening the customize tree browser.
Refactor `haskell-{process,session}-{set,get}` functions

Under the assumption, that the {process,session} dictionary is
modified only via these functions and that keys are always symbols,
the new code is a bit more Elisp-idiomatic and should be more
efficient.
Fix `haskell-interactive-switch` to match `switch-to-haskell`

This switches to the REPL even if the REPL window is already visible
and should thus fix #155.
Remove `haskell-{hugs,ghci}` including most references

Those bitrotting modules have been deprecated for quite some time now,
and haskell-mode.el has been informing users since ce945dc (i.e. 5+
years) about their deprecation. This closes #170.
Update README w.r.t. supported Emacs versions
Extend regexps in interactive-mode to accept `-ferror-spans`

This just generalizes the regexps used for matching error lines in
`haskell-{process,interactive-mode}.el` to allow for an optional 2nd
column number (which then forms a span "startcol-endcol")

This is a step for addressing #151
Fix `haskell-interactive-switch` opening a 2nd redundant window

Due to `(haskell-session)` creating (and selecting) a new REPL window
if the session didn't exist prior to its invocation,
`haskell-interactive-switch` needs to check whether the current window
is already showing the REPL buffer before calling
`switch-to-buffer-other-window`.

This should fix #171 which is a regression introduced via fb0168b
(for addressing #155).
Simplify default for `haskell-process-path-ghci`

This just uses a static `"ghci"` as default value instead of the
previous auto-detection which would favor Hugs over GHCi for no good
reason.
Improve `egrep` hack in `haskell-session-project-modules`

With this, egrep error messages are silenced and the pattern are more
tolerant with respect to whitespaces in the `module`-line
Mark a few yasnippet related functions as autoloaded

This simplifies the definition of haskell snippets; e.g. now one can define the snippet simply as

    # key: imp
    # name: import
    # condition: (= 3 (current-column))
    # --
    import `(haskell-yas-complete "Module: " (haskell-session-all-modules))`

without having to declare to `require`s
Refactor `haskell-session-{all,installed,project}-modules` functions

This simplifies/improves the implementation a bit and adds a new
optional `DONTCREATE` boolean argument to suppress creating a new
session if it isn't already established. This new flag is useful for use in
yasnippet (see also 7fbcde0):

    # key: imp
    # name: import
    # condition: (= 3 (current-column))
    # --
    import `(haskell-yas-complete "Module: " (haskell-session-all-modules t))`
Remove obsolete `haskell-session-clear-all` function
Factor out recurring regexp literal into `h-i-m-error-regexp` defconst