Commands Refactor Part 2

We split #196 in two parts. this is the second. (#262 is the first). This builds on all the changes to commands/.
instead of exiting in these functions, they should return an error, and let the caller print out and `exit(1)`. All these exits will make editing + moving the call graph harder.