Improvements to Haskell Lexer:

* Added support for MagicHash extension (lexer.haskell.allow.hash)
* Removed "qualified" and "as" from keywords.(They aren't keywords)
* Removed "primitive" from keywords.(Not a keyword, never heard of it)
* Added FFI keywords.
* Added "default", "infixl", "infixr" and "infix" to keywords.
* $ and # are now colored as operators.
* .0 and -0 are now properly colored as operator and a number, not as just number.
* Operators starting with double dash (e.g ---->) are properly colored as operators, not comments.
* Added pragma highlighting.
* Added basic C-preprocessor highlighting.
* Qualified names (e.g. ABC.xyz) are now properly highlighted as identifiers, not types.
* Qualified operators (e.g. ABC.<$>) are now properly highlighted as operators.
* Operator . is now properly highlighted as an operator, not part of the identifier, when applied to a qualified and an unqualified value (e.g. Abc.xyz.yzx <- last one is an operator)
* Operators starting with ':' are now properly highlighted as type constructors, not operators.
* "family" after "data" is highlighted, as per TypeFamilies.