Add show_completion() and completion() for generating bash completion functions

## Sample code
```perl
use Getopt::Compact::WithCmd;

my $go = Getopt::Compact::WithCmd->new(
    name          => 'foo',
    version       => '0.1',
    args          => 'FILE',
    global_struct => [
        [ [qw/f force/], 'force overwrite', '!', \my $force ],
        [ [qw/completion/], 'generate completion code', '=s', \my $completion ],
    ],
    command_struct => {
        get => {
            options     => [
                [ [qw/d dir/], 'dest dir', '=s', undef, { default => '.' } ],
                [ [qw/o output/], 'output file name', '=s', undef, { required => 1 }],
            ],
            desc        => 'get file from url',
            args        => 'url',
            other_usage => 'blah blah blah',
        },
        remove => {
            args => 'url',
            desc => 'delete file',
        }
    },
);

if ($completion) {
    $go->show_completion($completion); # will exit
} else {
    print "go ahead!\n";
    #...
}
```

## Generate completion code
```sh
$ foo.pl --completion bash

_foo() {
  COMPREPLY=()
  local cur=${COMP_WORDS[COMP_CWORD]}
  local prev=${COMP_WORDS[COMP_CWORD-1]}
  local cmd=()
  for ((i=1; i<COMP_CWORD; i++)); do
    # skip global opts and type to find cmd
    if [[ "${COMP_WORDS[$i]}" != -* && "${COMP_WORDS[$i]}" != [A-Z]* ]]; then
      cmd[${#cmd[@]}]=${COMP_WORDS[$i]}
    fi
  done

  local global_opts="-h --help -f --force --completion"
  local cmds="get remove"

  case "$cmd" in
    get)
      case "$prev" in
        -d|--dir)
          COMPREPLY=($(compgen -W "Str" -- "$cur"))
          ;;
        -o|--output)
          COMPREPLY=($(compgen -W "Str" -- "$cur"))
          ;;
        *)
          COMPREPLY=($(compgen -W "-h --help -d --dir -o --output url" -- "$cur"))
          ;;
      esac
      ;;
    remove)
      case "$prev" in
        *)
          COMPREPLY=($(compgen -W "-h --help url" -- "$cur"))
          ;;
      esac
      ;;
    *)
      case "$prev" in
        -f|--force)
          COMPREPLY=($(compgen -W "Bool" -- "$cur"))
          ;;
        --completion)
          COMPREPLY=($(compgen -W "Str" -- "$cur"))
          ;;
        *)
          COMPREPLY=($(compgen -W "$global_opts $cmds" -- "$cur"))
          ;;
      esac
      ;;
  esac
}

complete -F _foo foo
```

## How to use it
```
$ foo.pl --completion bash > foo-comp
$ . foo-comp
  OR
$ eval "$(foo.pl --completion bash)"
```