Refactor chromeos::PipeReader.

Before this change, PipeReader cannot report an error.
With this change, it can.
Also, simplify the cancel flow. Now, as a common pattern
used across chrome repository, just deleting the instance
will cancel the inflight operation.

Also, PipeReaderForString was the only subclass. So merged
PipeReader.

Added unittests.

BUG=776310
TEST=Ran bots.

Change-Id: I6cda997b36db1703f79f9fe5e682f95af923ff3d
Reviewed-on: https://chromium-review.googlesource.com/727445
Reviewed-by: Steven Bennetts <[email protected]>
Reviewed-by: Simon Que <[email protected]>
Commit-Queue: Hidehiko Abe <[email protected]>
Cr-Commit-Position: refs/heads/master@{#512607}
diff --git a/chromeos/BUILD.gn b/chromeos/BUILD.gn
index 3331a79..bb4221d 100644
--- a/chromeos/BUILD.gn
+++ b/chromeos/BUILD.gn
@@ -662,6 +662,7 @@
     "dbus/fake_power_manager_client_unittest.cc",
     "dbus/gsm_sms_client_unittest.cc",
     "dbus/modem_messaging_client_unittest.cc",
+    "dbus/pipe_reader_unittest.cc",
     "dbus/power_manager_client_unittest.cc",
     "dbus/power_policy_controller_unittest.cc",
     "dbus/services/cros_dbus_service_unittest.cc",