- Warn about unknown SubCmd

- How about a default SubCmd? (e.g. bif list topics?)

- Check for multiple use of the same alias character

- Fix --version example to use $cmd->name instead of just $cmd (or else
  pass $basename as additional argument to the trigger)

- Roles:

    cmd_role 'role_name' => (
        abbrev  => 1,
        optargs => sub {
        },
    );

    subcmd 'App::foo::bar' => (
        with    => 'role_name',
        optargs => sub {

            # cmd specific
        },
    );

- Do not inherit options from parent commands?

- An Enum type (or allow callers to use Type::Tiny directly)
    opt things => (
        isa     => 'Enum',
        valid   => [qw/one two three/],
        comment => 'only allows set values',
    );

- Lots of error checking
    - No more args after SubCmd
    - Arg/Opt name same as existing
    - Use X->new_from(%parameters) in place of BUILDARGS
    - Croak when two greedy arguments are defined

- If UTF8 arguments becomes an issue somewhere take a look at
  Encode::Locale.