Introduce renames in status

Renames in status require more detailed data than simply paths, in
order to collect old path, new path and similarity data.  Use
git_status_list to collect this data and use a new StatusEntry to
store it.
Introduce StatusShowOption (for git_status_show_t)
Workdir to WorkDir
Introduce StatusOptions.ExcludeSubmodules
Minor refactor for cleanliness