This patch adds intrapackage dependency resolution so that components (libraries, exes, test suites) are build in the correct order. This mean it's now possible to have, e.g., executables that depend on other executables defined in the same package description: the build-tools namespace has been extended accordingly. Related to this change is the refactoring of the do-it-all preprocessSources function, formerly invoked by initialBuildSteps, into a a function preprocessComponent that is invoked when a component is being built. This lets us use executables defined in a package to be used as a custom preprocessor when building other components. Finally, a number of functions now operate on values of the sum type PackageDescription.Component rather than specifically operating on Library or Executable and so forth.