Split MonadTrav into several monads
Split MonadTrav into several monads

The MonadTrav class serves several purposes, and some useful functions
only need some of its available methods. This patch splits it into
several monads:

* MonadName, for fresh name generation.
* MonadSymtab, for symbol table operations.
* MonadCError, for C-specific error handling.
* MonadTrav, combining all of the above, plus a callback function.


vincenthz/language-c,vincenthz/language-c,vincenthz/language-c