Use asynchronous handler for org.chromium.Service.Start D-Bus call

This allows us to handle this D-Bus call asynchronously for Brillo
devices.  Since we want to wait for the newly created AP interface
to be enumerated before starting the service.

For now, this handler will return synchronously on both Chrome OS
and Brillo.  A separate CL (CL:178864) will update this handler to
return asynchronously on Brillo.

While there, remove the unnecessary mock function for Service.Start
and Service.Stop, since these are D-Bus method handlers.  Even though
the MockService class is now empty, we might still need it when we
remove the D-Bus dependency from the Service class (b/24194427),
so keep it for now.

Bug: 25113165
TEST=Unittest on both Chrome OS and Brillo
TEST=Manual test on both Chrome OS and Brillo

Change-Id: If0ba13ae89a25bdf9207803d7d6b008e9ad6165e
diff --git a/service.cc b/service.cc
index b3a6cd9..99073fb 100644
--- a/service.cc
+++ b/service.cc
@@ -30,6 +30,7 @@
 #include "apmanager/manager.h"
 
 using brillo::dbus_utils::AsyncEventSequencer;
+using brillo::dbus_utils::DBusMethodResponse;
 using brillo::dbus_utils::ExportedObjectManager;
 using org::chromium::apmanager::ManagerAdaptor;
 using std::string;
@@ -103,7 +104,7 @@
   config_->RegisterAsync(object_manager, bus, sequencer);
 }
 
-bool Service::Start(brillo::ErrorPtr* error) {
+bool Service::StartInternal(brillo::ErrorPtr* error) {
   if (IsHostapdRunning()) {
     brillo::Error::AddTo(
         error, FROM_HERE, brillo::errors::dbus::kDomain, kServiceError,
@@ -182,6 +183,16 @@
   return true;
 }
 
+void Service::Start(std::unique_ptr<DBusMethodResponse<>> response) {
+  brillo::ErrorPtr error;
+
+  if (!StartInternal(&error)) {
+    response->ReplyWithError(error.get());
+  } else {
+    response->Return();
+  }
+}
+
 bool Service::Stop(brillo::ErrorPtr* error) {
   if (!IsHostapdRunning()) {
     brillo::Error::AddTo(