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/.
this stuff is not very readable. this would help:

```Go
cmds.IntOption("b", "bits", "Number of bits to use in the generated RSA private key (defaults to 4096)")
```

`cmds.IntOption` (instead of `cmds.Option(cmds.Int` to match the familiar `flag` package api, and because it stutters).


Can implement vararg before a description this way:

```Go
func(args ...string) {
  if len(args) < 2 {
    panic("Options require at least two string values (name and description)")
  }

  desc := args[len(args)-1]
  aliases := args[:len(args)-2]
  ...
}
```

option defaults come to mind, too:

```Go
cmds.IntOption(4096, "b", "bits", "Number of bits to use in the generated RSA private key")
```