Use `chpwd_functions` array in zsh instead of overriding `cd`

This is a better way to load autoenv than overriding `cd` in zsh, because with
this method, autoenv will work fine even if auto_cd option is turned on in zsh
(typing just the directory name without a `cd` to change directory).

And (as a minor point) it produces cleaner error message,

    autoenv_cd:cd:2: no such file or directory: non-existent

vs.

    cd: no such file or directory: non-existent