Provide sensible error message if no archive is specified

It's fairly easy to accidentally fail to provide an archive argument (in my case with `deploy: { archive: "a.zip" }`, not `deploy: { options: { archive: "a.zip" } }`, but I'm sure there's lots of other ways to screw this up), and if you do you just get a 'arguments to path.join must be strings' error, which is pretty unhelpful, and annoying to debug.

This patch catches that case, and throws a more meaningful error if you fail to provide an archive option somewhere along the way.