Helper function for creating zip archives

Differs from the built-in zip() function in that it is easy to make
it quiet (though portability untested) and will zip a directory without
storing all the leading paths.
Better handling/printing of multiple targets to make

When make is called with >1 target, we print the name of the target at
each call.  This also consolidates code from main() into make().
Very basic support for archiving a set of artefacts.

Some extra work will be needed here for things like knitr targets
that produce (at least) a figure/ directory.