Refactor ProjectBuilding into Package Phases
This refactor of Distribution.Client.ProjectBuilding does the following:
* Moves package file monitoring logic to
Distribution.Client.ProjectBuilding.PackageFileMonitor
* Moves the `buildInplaceUnpackedPackage` and
`buildAndInstallUnpackedPackage` with auxiliary functions to
Distribution.Client.ProjectBuilding.UnpackedPackage
* Refactors the common bits of `buildInplaceUnpackedPackage` and
`buildAndInstallUnpackedPackage` to remove considerable code
duplication while simplifying and making both functions more
structured.
Namely, to better structure build inplace vs build and install, I've
introduced:
* `PackageBuildingPhase` describes the various phases of processing the
unpacked package both inplace and on install
* Configure
* Build
* Install (copy + register)
* Test
* Bench
* Repl
* Haddock
* Then, `buildAndRegisterUnpackedPackage` implements the common logic
between the two functions (such as calls to ./Setup and the order of
the phases) but delegates the logic specific to each phase to an
argument function which maps `PackageBuildingPhase` to `IO` actions.
* Now, build inplace and build and install functions are comprised as:
* A wrapper around `buildAndRegisterUnpackedPackage` which does
things specific to each before and after the main phases are
processed
* A delegate function which maps an action to each package
processing phase
Fixes #9499