Add a new --functor option to the Haskell backend

Turn the AST into a parametrized functor that can be used to store, for
instance, type informations.

Some refactoring:
- introduce a new Cat data constructor TokenCat that makes it possible
  to easily distinguish between regular categories and token categories
  in code generation without passing arround the list of user-defined
  tokens.
- group custom pretty-printing function in BNFC.PrettyPrint. It also
  re-export the whole Text.PrettyPrint module so you only have to import
  one
- create some generic function to create names, taking into account
  reserved words and the language style. If it turns out to be generic
  enough, it could be used in other backends.