Normalize a relative path by resolving . and .. components using Path APIs.
Does not touch the filesystem. Always returns forward-slash separated paths.
Preserves leading .. that escape above the root — these indicate graph escape.
Resolve a link target relative to a source file, producing a path relative to the graph root.
Uses Path::join for correct platform-aware path handling.