Functional testing framework and basic tests

This change adds the beginnings of a comprehensive functional testing
framework for ClusterRunner. This code is heavily based off of the
previous framework we had in a separate repo (ClusterTester) but has
been mostly rewritten and expanded to do more verification on the API
and filesystem results of a build.

I plan to add more tests and framework code, and we should also add to
these as needed, but wanted to get this out for feedback as it stands.