Command Interface

This isn't ready for merge yet, PRing for code review/comments.
both of these ignore errors. This is also a weird construction, in that it's not clear from calling this function that `names` will be modified, and `checkOptions` is sort of partial. What about something like this. It's long, but clear, complete, and not partial 

```Go
err := checkOptionClashes(globalCommand, c, sub)
...

func checkOptionClashes(cmds ...*Command) error {

	// track the command to show a more meaningful error
	names := map[string]*Command

	var checkCmd func(c *Command) err
	checkCmd := func(c *Command) err {

		// 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 := checkCmd(c2); err != nil {
				return err
			}
		}
	}


	// check all given commands 
	for _, cmd := range cmds {
		if err := checkCmd(c2); err != nil {
			return err
		}
	}

	return nil
}
```