Fix up parallel builds

These three tickets all relate to the behvior of parallel builds that
have jobs executing simuiltaneously in multiple branches.

First, each message needs to stand on its own. Depending on looking
back in the log for the single current working directory does not apply
when there are multiple jobs. So compiles have to compile sources
using absolute paths, and so on. Also, any progress messages naming
targets also name the relative path within the project.

Second, the recursive build required a block of make scripting for each
recursive rule. This is now improved to a single block of scripting that
is driven by a list of directories and a list of targets.

Third, as phony targets proliferate, the chances that a phony target name
might match a file increases, so be sure to correctly note each phony target
to the build sysetm.