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