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/.
is this `ok` in scope? i guess it is since it compiles... it's confusing to read though. why not:

```Go
helpBool, ok := help.(bool)
if !ok {
  fmt.Println("error: expected 'help' option to be a bool")
  exit(1)
}
// presumably this part will be removed anyway, with `options.BoolOption("help")` or whatever.

if helpBool {
  helpText, err := cmdsCli.HelpText("ipfs", root, req.Path())
  if err != nil {
    fmt.Println(err.Error())
    exit(1)
  }
  fmt.Println(helpText)
  exit(0)
}
```