Stricter functional test validation

This changes the way that the functional tests validate the artifact
directory structure and contents. Previously, we only asserted on the
presence of the specified files. Now, we'll also assert on the absence
of unspecified files -- that is, we fail the test if any unexpected
files are present in the build artifact directories.