Fix haskell-ident-pos-at-point prime problem

So this was odd. I don't know how for how long this has been broken,
but haskell-ident-pos-at-point was unable to extract "foo'" from the
string "foo'", instead returning "foo". I looked into it and found a
few odd things:

1. “'” was being used which is for aposotrophes, commas, etc. I think
   that's wrong. We don't want to consider those part of identifers.
2. “_” was not being used, which is for symbolic characters usually
   attached to words (“w”), like ‘_’ or in the case of Haskell also
   “'” (prime).
3. There was this strange condition which said “if we're looking at
   a symbol character (like “_” or “'”), then take the string of
   skipping that backwards and forwards. This lead the function to
   only return “'” on “foo'bar” with the cursor before “'”. I have no
   idea what this functionality was for, but it seems to serve no
   useful purpose and breaks other functionality.

I note that Hans-Peter Deifel added

    (modify-syntax-entry ?\' "_" table)

to the syntax table in September 2014, which is a good change, and
useful towards fixing this problem.

(See here for reference: <https://www.gnu.org/software/emacs/manual/html_node/elisp/Syntax-Class-Table.html#Syntax-Class-Table>)

I've added test-cases for all the kinds of identifiers I could think
of, including w and _ characters, and also ' and " characters, such as
being inside quotes or between commas. Rather than wonder why such
odd-looking decisions were made, it seems proper to solidify what
it *should* be doing and have a decent set of test cases.

@reinh @hvr @purcell