Extending Cabal with Plugins, Preprocessors and Multi-target Compilers