suite: don't run immediately when created

Instead, return a function that will run the suite when called with no
arguments.
suite: store all passed-in arguments

We want to be able to access all the arguments passed in to a suite
function call from outside the function, so that we can create a new
suite from an existing one and modify only some of the arguments.
suite: run all teardowns after running each test
ggspec: add user stories
suite: handle variable number of args

If we turn suite into a case-lambda, we can handle the absence or
presence of options, setups, and teardowns. The minimum required
arguments are now the suite description and a list of tests. This makes
life easier for test writers at the cost of having to write tests
_before_ options, setups, and teardowns. However, I think this is a good
thing because it forces them to focus on tests _first_, and _then_
everything else.