More robust normalization of file paths.

"./foo/bar" and "foo/./bar" are now treated the same, for example.  Note
that we do not yet treat "foo/../bar" and "bar" as the same.