new rules layout

Rules are no longer nested inside of modules. Instead, all rules are
declared at the top level. You refer to e.g. module foo built with rule
bar using a colon, "foo:bar". You can even chain multiple rules
together, like "foo:bar:baz". The colon is slightly awkward, because
YAML uses it too, so we might want want to look for another token. But
dot is reserved for hypothetical scoping syntax, and in the meantime
YAML doesn't seem to have a problem with the ambiguity.

Default rules are back. This will avoid the need for the colon notation
in most cases. We don't have a way to specify a default rule by name,
but you can use YAML's magical &ref/*ref syntax if you want to avoid
duplication. (This has the benefit of letting the user define only
default rules, rather than requiring a toplevel rule for a reference.)
forbid whitespace in plugin field names
run flake8 as part of test.sh
stop suppressing integration test output by default
make sure temp dirs get cleaned up

Use context managers for cache.tmp_dir(), and add a test to check that
the $cache_root/tmp directory is clean after each integration test.