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.