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