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/.
> sometimes you do want the thing to crash.

In those cases, we can have the commands panic with an error that has a certain code (e.g. `panic(Error{"Something bad happened", ErrCritical})`, then the code that is running the command can let the panic happen.