Extend DistDirLayout with project root and cabal.project
So the DistDirLayout now contains the root dir of the project as a whole, which eliminates the need to pass it separately in several cases. It also contains the location of the cabal.project file, which again avoids having to pass it around. In part these changes were to allow the elimination of uses of the legacy config types in the new-build code. The idea is that the legacy config types are only used by conversion into the new config types, and then only the new types are used in the new code.