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.