Better capturing and handling of test failures

ftests.sh runs a series of tests. There was a problem, however, that
made the test script exit with a 0 status even when there were
failures. The reason for this is because the tests exist in separate
files, and ftests.sh ignores the exit code when it calls each script. I
discovered this when I got a false positive in a CI build.

This change fixes all of that and properly captures the exit codes. If
there are any test failures, ftests.sh will print an error message and
exit with a status of 1.