shill: wifi: Scan for hidden SSIDs

Find all services with the "hidden" property set.  If any exist,
specify the "SSIDs" argument to wpa_supplicant and supply up to
MAX_SSIDS-1 of them as arguments to the scan, as well as the
broadcast SSID.

Side effect -- removed the "services_" vector from the Service
superclass.  I don't think a non-subclassed Service vector makes
any sense to keep around.

BUG=chromium-os:22074
TEST=New Unit Test

Change-Id: I52af8b81d301a9561812af04a16df6e6fcc644bc
Reviewed-on: https://gerrit.chromium.org/gerrit/11347
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/wifi_service.cc b/wifi_service.cc
index 618f40a..a189698 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -37,12 +37,13 @@
                          const WiFiRefPtr &device,
                          const std::vector<uint8_t> ssid,
                          const std::string &mode,
-                         const std::string &security)
+                         const std::string &security,
+                         bool hidden_ssid)
     : Service(control_interface, dispatcher, manager, flimflam::kTypeWifi),
       need_passphrase_(false),
       security_(security),
       mode_(mode),
-      hidden_ssid_(false),
+      hidden_ssid_(hidden_ssid),
       task_factory_(this),
       wifi_(device),
       ssid_(ssid) {
@@ -92,9 +93,6 @@
     LOG(ERROR) << "unsupported security method " << security_;
   }
 
-  // TODO(quiche): figure out when to set true
-  hidden_ssid_ = false;
-
   // Until we know better (at Profile load time), use the generic name.
   storage_identifier_ = GetGenericStorageIdentifier();
 }