path: properly resolve relative paths

`git_path_resolve_relative` should now try to resolve a relative path, instead of cleaning most ``../``. And trying to up one from the root path is now an error, probably a user supplied relative path is invalid.

And I have no idea how windows works, is something like this needed??
```
#ifdef GIT_WIN32
#  define git_path_is_dir_sep(c) ((c) == '/' || (c) == '\\')
#else
#  define git_path_is_dir_sep(c) ((c) == '/')
#endif
```