Add precondition check for s3 destination resources

There was already a check for the source resources, but not
for the destination sources.  Now, before actually trying to
run commands, we validate that the s3 resources exist.

Tests added that show the new error cases.  I kept the 255 RC,
as that's what clidriver is currently using for uncaught exceptions.

Fixes #376.

Before implementing these fixes, I commited a few changes that cleaned
up s3.py and it's related tests.