Haskell header sorting improvements.

-  Support sorting imports where an import cover multiple lines.

Example:
```haskell
import           Snap.Internal.Http.Types hiding (addHeader,
                                                  setContentType,
                                                  setHeader)
import qualified Snap.Internal.Http.Types       as H
import           Snap.Internal.Parsing
import           Snap.Internal.Types            (evalSnap)
import           Snap.Iteratee                  hiding (map)
import           Snap.Core                      hiding ( addHeader
                                                       , setContentType
                                                       , setHeader )
import qualified Snap.Types.Headers             as H
```

Unfortunately, the regexp that cover multiple lines requires a regexp
engine that chooses the longest match for a string, something that
emacs does not do by default.  Thus this patch includes a
generalization of the sort-regexp-fields from emacs' sort.el in
general-sort.el.  We use this version with the 'posix-search-forward
regexp function which returns the longest match.

-  Support sorting of imports that are preceeded by a comment.  The
comment can span multiple lines.

Example:
```haskell
import           Snap.Internal.Http.Types hiding (addHeader,
                                                  setContentType,
                                                  setHeader)
import qualified Snap.Internal.Http.Types       as H
-- This is needed too!
-- And this is a multi-line comment
import           Snap.Internal.Parsing
import           Snap.Internal.Types            (evalSnap)
import           Snap.Iteratee                  hiding (map)
import           Snap.Core                      hiding ( addHeader
                                                       , setContentType
                                                       , setHeader )
-- Because of .. whatever
import qualified Snap.Types.Headers             as H
```

-  Remove the need to have point on a line starting with ^import
for sorting to work.  Instead we use a regexp that indicate what
is "out-of-bounds" and restrict the region to sort to that area.

-  If point is outside of the import region, locate the import section
in the buffer and sort it, unless the section contains 'fishy' text,
including
  - CPP directives
  - The separator "--------" which is sometimes used to explicitly
    separate imports into sections which should be sorted
    independently.

-  I think haskell-sort-imports now should be safe to add to
before-save-hook like so:

```emacs-lisp
(defun my-haskell-mode-hook ()
   ...
  (add-hook 'before-save-hook 'haskell-sort-imports nil 'make-it-local)
   ...)
```