Refactor CLI command handling
Refactor CLI command handling

Instead of requiring the handler for each command to return
a promise for the exit status, allow the handler to return
a promise for any value.

This allows simplifying the command handlers and removes
the duplicated conversions between promise results and
exit statuses.

 - If the promise is resolved with a non-numeric value, set the
   exit status to 0
 - If the promise is resolved with a numeric value, use that
   as the exit status

robertknight/passcards,robertknight/passcards,robertknight/passcards,robertknight/passcards