This is a full rewrite of the zsh completion based on the changes we
made to support external commands. A function for each brew command
handles only that command's arguments. The main completion function
dispatches the completion flow to the correct function. This
generically works with both internal and external commands.
This change includes all arguments for all internal brew commands.
Some commands are missing argument documentation due to missing help
docs.
If the user has an alias overriding the `ls` command that modifies the
output (e.g. `alias ls='ls -F'`), it will cause unexpected characters to
appear in completions. Using `command ls` forces the shell to use the
command directly, without alias expansion.
This also blackholes the stderr of `ls` when used to avoid printing
errors during completion if the requisite directory does not exist.