Command Interface

This isn't ready for merge yet, PRing for code review/comments.
Or, if you do want to keep the function (it could be useful elsewhere), make it more clear, do the multi-command check in one place, and check all errors (even if they're _not supposed to_ be errors in those calls, because they should've been caught before... (bugs)).

```Go
err := checkOptionClashes(globalCommand, c, sub)
...


// addOptionNames 
func (c *Command) addOptionNames(names map[string]*Command) error {

	// for every option
	for _, opt := range c.Options {

		// for every option name
		for _, name := range opt.Names {

			// if name clashes, error out.
			if c2, found := names[name]; found {

				// option can be reused in same command, but more often than not
				// the clash will be across commands so error out with that, as
				// commands tell us where the problem is
				errstr := "Option name ('%s') used multiple times (%v, %v)"
				return fmt.Errorf(errstr, c2, c)
			}

			// mark the name as in use
			names[name] = c
		}
	}

	// for every subcommand, recurse
	for _, c2 := range c.subcommands {
		if err := c.addOptionNames(names); err != nil {
			return err
		}
	}

	return nil
}

// checkOptionClashes checks all command option names for clashes 
func checkOptionClashes(cmds ...*Command) error {
	names := map[string]*Command{}

	for _, c := range cmds {
		if err := c.addOptionNames(names); err != nil {
			return err
		}
	}

	return nil
}
```