Add pid and exitCode getters.

This makes the API more similar to dart:io's Process.
diff --git a/lib/test_process.dart b/lib/test_process.dart
index 1ad3279..3584ab5 100644
--- a/lib/test_process.dart
+++ b/lib/test_process.dart
@@ -54,10 +54,17 @@
   /// Whether [_log] has been passed to [printOnFailure] yet.
   bool _loggedOutput = false;
 
+  /// Returns a [Future] which completes to the exit code of the process, once
+  /// it completes.
+  Future<int> get exitCode => _process.exitCode;
+
+  /// The process ID of the process.
+  int get pid => _process.pid;
+
   /// Completes to [_process]'s exit code if it's exited, otherwise completes to
   /// `null` immediately.
   Future<int> get _exitCodeOrNull async =>
-      await _process.exitCode.timeout(Duration.ZERO, onTimeout: () => null);
+      await exitCode.timeout(Duration.ZERO, onTimeout: () => null);
 
   /// Starts a process.
   ///
@@ -153,7 +160,7 @@
     if (_loggedOutput) return;
     _loggedOutput = true;
 
-    var exitCode = await _exitCodeOrNull;
+    var exitCodeOrNull = await _exitCodeOrNull;
 
     // Wait a timer tick to ensure that all available lines have been flushed to
     // [_log].
@@ -161,10 +168,10 @@
 
     var buffer = new StringBuffer();
     buffer.write("Process `$description` ");
-    if ((await _exitCodeOrNull) == null) {
+    if (exitCodeOrNull == null) {
       buffer.writeln("was killed with SIGKILL in a tear-down. Output:");
     } else {
-      buffer.writeln("exited with exitCode $exitCode. Output:");
+      buffer.writeln("exited with exitCode $exitCodeOrNull. Output:");
     }
 
     buffer.writeln(_log.join("\n"));
@@ -210,7 +217,7 @@
   /// If this is called after the process is already dead, it does nothing.
   Future kill() async {
     _process.kill(ProcessSignal.SIGKILL);
-    await _process.exitCode;
+    await exitCode;
   }
 
   /// Waits for the process to exit, and verifies that the exit code matches
@@ -219,7 +226,7 @@
   /// If this is called after the process is already dead, it verifies its
   /// existing exit code.
   Future shouldExit([expectedExitCode]) async {
-    var exitCode = await _process.exitCode;
+    var exitCode = await this.exitCode;
     if (expectedExitCode == null) return;
     expect(exitCode, expectedExitCode,
         reason: "Process `$description` had an unexpected exit code.");
diff --git a/test/test_process_test.dart b/test/test_process_test.dart
index 8acf2a6..81d27e1 100644
--- a/test/test_process_test.dart
+++ b/test/test_process_test.dart
@@ -17,16 +17,19 @@
   group("shouldExit()", () {
     test("succeeds when the process exits with the given exit code", () async {
       var process = await startDartProcess('exitCode = 42;');
+      expect(process.exitCode, completion(equals(42)));
       await process.shouldExit(greaterThan(12));
     });
 
     test("fails when the process exits with a different exit code", () async {
       var process = await startDartProcess('exitCode = 1;');
+      expect(process.exitCode, completion(equals(1)));
       expect(process.shouldExit(greaterThan(12)), throwsTestFailure);
     });
 
     test("allows any exit code without an assertion", () async {
       var process = await startDartProcess('exitCode = 1;');
+      expect(process.exitCode, completion(equals(1)));
       await process.shouldExit();
     });
   });