Use recommended python3.6 APIs and document 3.7 upgrades (#4134)

- Remove remaining %-string substitutions (`absl.logging` excluded).
- Replace all `subprocess.check_*` calls with the recommended `subprocess.run(check=True,...)`.
- Add TODO(#4131) for the following:
  - `python>=3.7: Use postponed type annotations.`
  - `python>=3.7: Consider using a dataclass.`
  - `python>=3.7: Use capture_output=True.`
  - `python>=3.7: Replace 'universal_newlines' with 'text'.`
  - `python>=3.7: Remove redundant OrderedDict.`
diff --git a/scripts/utils.py b/scripts/utils.py
index 870044b..313dd65 100644
--- a/scripts/utils.py
+++ b/scripts/utils.py
@@ -33,10 +33,13 @@
   print(f'Running: `{" ".join(command)}`')
   if dry_run:
     return None, None
-  process = subprocess.run(command,
-                           stderr=subprocess.PIPE,
-                           stdout=subprocess.PIPE,
-                           universal_newlines=True)
+  process = subprocess.run(
+      command,
+      # TODO(#4131) python>=3.7: Use capture_output=True.
+      stderr=subprocess.PIPE,
+      stdout=subprocess.PIPE,
+      # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+      universal_newlines=True)
 
   if log_stderr:
     for line in process.stderr.splitlines():