CanonicalURLPath returns the canonical url path for p, which follows the rules:
1. the path always starts with "/"
2. replace multiple slashes with a single slash
3. replace each '.' '..' path name element with equivalent one
4. keep the trailing slash
The function is borrowed from stdlib http.cleanPath in server.go.