vc.git: Handle Unicode filenames in a git tree correctly

Correctly save and retrieve files state and meta in a Git tree.
vc.git: Fix unicode path handling for ignored and unversioned files

The previous path fixed unicode handling for modified and staged files,
but not ignored and unversioned ones. This commit factors out a bunch
of common path normalisation code for Git paths and uses it for all
paths when creating the tree state cache.
vc.git: Store filenames as unicode in the tree cache

Rather than assuming that we've got UTF8 filenames, this commit decodes
all paths using the filesystem encoding before inserting them into the
tree cache.
vc.git: Fix unicode path handling for single file cache updates