Allow CliBuilder.withGroup to be called multiple times with the same argument

1) Adjust Cli.CliBuilder to return the same GroupBuilder on calls to withGroup() with the same name

2) Adjust Cli.GroupBuilder to do state checks for the description and the default command so that you can be certain that the description and default command are only set once.