Refactor of #7887

Closes #7887

Thanks @rhatdan for most of the work

@rhatdan I changed behavior for `CmdLogin`, `CmdLogout`, `CmdPs`. Can you double check it's correct?
@icecrime Yeah... it's a little hacky. If you prefer I can add a Name() method to FlagSet, just like I already had to add an Output() method. That way, CheckArgs would only return the message.

The reason I need to add the "See docker ... --help" string is because that adding `--help` as the code is now, is not in the responsibility of pkg/mflag but of the docker code.