Flesh out the Program run code to cover all cases

Previously the runProgramInvocation impl only covered the common special
cases that we currently use. In particular it did not support env vars
or changing the workind directory.

Also change the ProgramInvocation { progInvokeEnv } to allow unsetting
env vars, not just setting them to new values.

This stuff would be better if we could use createProcess for all cases
but that doesn't yet support running programs in the foreground with
proper ctl-C handling (only rawSystem currently supports that).

Conflicts:
	Cabal/Distribution/Simple/Test.hs
	Cabal/Distribution/Simple/Utils.hs
Add a programOverrideEnv to the ConfiguredProgram

And use it in programInvocation. So configured programs can have
environment var overrides that will be used in all invocations, like
the existing support for default and override arguments.
Allow the Program programPostConf to update all settings, including env

So rather than only returning the default args it can adjust any of the
ConfiguredProgram settings, including programDefaultArgs as now but now
also the programOverrideArgs and the new programOverrideEnv.
Add a notion of program search path to the ProgramDb

Previously we would just use the normal system $PATH for finding
programs (unless the Program provided some custom method). Now the
ProgramDb has its own notion of the search path and we use that for
finding programs (by default). The search path can be either specific
directories or the system search method (ie $PATH on unix and something
similar on Win32). The default search path is just the system one.

In addition, this search path is passed on to programs when we invoke
them as the $PATH env var.

Conflicts:
	Cabal/Cabal.cabal
	Cabal/Distribution/Simple/GHC.hs
	Cabal/Distribution/Simple/Program/Types.hs
Add a configure --extra-prog-path flag

Can be used to add extra dirs to the end of the program search path.
This in mainly useful as a config file entry rather than a command line
flag, but it'll exists as both.

Conflicts:
	Cabal/Distribution/Simple/Setup.hs