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/.
And, if "there is no path because this across an API", well there needs to be a wrapper around the Cli end of it that does. this inevitable context-dependent edge case is what I was talking about a while back.