Move gclient path access to separate module.

gclient_utils.py is a kitchen sink and is for that reason expensive
to import. Move the comparatively cheap and simple path routines
to a new gclient_paths module and use that in gn.py, clang_format.py,
dart_format.py.

(To be able to move FindGclientRoot() to gclient_paths.py,
make it use io.open() instead of FileRead(). FileRead() tries
to paper over invalid utf-8, but that was added for presubmits,
not for .gclient files, so this is hopefully fine.)

Cuts gn.py overhead in half (on my Windows laptop from 0.6s to 0.25s,
still high; on my Mac laptop from 0.1s to 0.05s), and probably helps
the other two too.

Completely remove PathDifference() since it's unused.

Bug: 939959
Change-Id: I6a70f6e4c16062b622fb2df8778e8a598d4cc956
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1512058
Commit-Queue: Nico Weber <thakis@chromium.org>
Reviewed-by: Andrii Shyshkalov <tandrii@chromium.org>
diff --git a/clang_format.py b/clang_format.py
index 804a205..5e952fc 100755
--- a/clang_format.py
+++ b/clang_format.py
@@ -9,7 +9,7 @@
 sync Chrome, to platform-specific locations. This script knows how to locate
 those tools, assuming the script is invoked from inside a Chromium checkout."""
 
-import gclient_utils
+import gclient_paths
 import os
 import subprocess
 import sys
@@ -25,14 +25,14 @@
 
 def FindClangFormatToolInChromiumTree():
   """Return a path to the clang-format executable, or die trying."""
-  bin_path = gclient_utils.GetBuildtoolsPlatformBinaryPath()
+  bin_path = gclient_paths.GetBuildtoolsPlatformBinaryPath()
   if not bin_path:
     raise NotFoundError(
         'Could not find checkout in any parent of the current path.\n'
         'Set CHROMIUM_BUILDTOOLS_PATH to use outside of a chromium checkout.')
 
   tool_path = os.path.join(bin_path,
-                           'clang-format' + gclient_utils.GetExeSuffix())
+                           'clang-format' + gclient_paths.GetExeSuffix())
   if not os.path.exists(tool_path):
     raise NotFoundError('File does not exist: %s' % tool_path)
   return tool_path
@@ -40,7 +40,7 @@
 
 def FindClangFormatScriptInChromiumTree(script_name):
   """Return a path to a clang-format helper script, or die trying."""
-  tools_path = gclient_utils.GetBuildtoolsPath()
+  tools_path = gclient_paths.GetBuildtoolsPath()
   if not tools_path:
     raise NotFoundError(
         'Could not find checkout in any parent of the current path.\n',