base: Port subprocess to Windows

Introduces a functionally-equivalent implementation of
base::Subprocess for Windows. Unlike POSIX, the windows
implementation is based on using blocking I/O and spawning two
threads (one for draining stdout/err, one for pumping stdin).
Using OVERLAPPED I/O on Windows is too complex (and also
internally seems to use a thread pool anyways) and isn't
worth the risk, given Subprocess is used only by tools/.
The only changes introduced on Linux/Android/Mac are:
- Changing the MovableState to be a unique_ptr. This make it safe to use
from other threads across std::move.
- Removing the kKilledBySignal state and folding it into
  kRunning.
- Adding an explicit bool timed_out() operator.

Test: perfetto_unittests.exe --gtest_filter=Subprocess*
Bug: 174454879
Change-Id: Ifa6ace5c58cf043861f474fff98e798f7764fb69
diff --git a/Android.bp b/Android.bp
index d089dff..2265a60 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6412,7 +6412,9 @@
     "src/base/string_splitter.cc",
     "src/base/string_utils.cc",
     "src/base/string_view.cc",
+    "src/base/subprocess.cc",
     "src/base/subprocess_posix.cc",
+    "src/base/subprocess_windows.cc",
     "src/base/temp_file.cc",
     "src/base/thread_checker.cc",
     "src/base/thread_task_runner.cc",