Define 'when' and 'unless' helpers

This will reduce the number of helper functions that we need
Rename some arguments
Change how the testsuite driver handles copying the test options

We now deepcopy the options for each test, which means that the test
helpers don't need to worry about sharing.
Pass the test name to the test options

This allows them to give framework failures.

I also had to change how setTestOpts works. Now, rather than applying
the options to the directory's "default options", it just stores the
options to be applied for each test (i.e. once we know the test name).
Remove unused *_num_fields bindings