Support for non-standard program search $PATH

Various internal infrastructure changes, but ultimately it should help us solve the problem where new users install programs like alex/happy/c2hs etc and then cabal cannot find the programs they just installed, because it puts them in a place that is not on the `$PATH`.

New users will get an entry in their `~/.cabal/config` like:
````
e.g. extra-prog-path: /home/duncan/.cabal/bin
````
And this dir will also be searched for programs, along with the `$PATH`.

Internally we add some infrastructure for allowing configured programs to have arbitrary env var overrides. We could also use this for other purposes (e.g. ignoring the `GHC_PACKAGE_PATH` env var by unsetting it in all calls to ghc.)

It also means that internally in the library we can have a local "virtual" `$PATH`, rather than having to share the process-global one.