Improvements to import sorting

1. 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.

2. 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
```

3. 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.

4. 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.

5. 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)
   ...)
```