added non-zero exit statuses for unsuccessful runs

Previously, the program always exited 0 unless it crashed.  This covered many of the failure scenarios like "permission denied" and "The specified bucket does not exist", but didn't cover anything that would provoke usage() to be called ("-h" notwithstanding)

This adds an arbitrarily ascending list of non-zero exit codes to all the cases of "usage" and also the exit() called for unaviliable multi-part upload.  usage() not defaults to exit status 1, since -h has been covered and most other uses of usage() would be for error conditions