shill: Initialize GSM home provider based on IMSI/SPN and provider DB.

Also, merge the GSM serving operator members (network_id, operator country,
operator name) into a Cellular::Operator structure.

BUG=chromium-os:22572
TEST=unit tests

Change-Id: Ic4e838df62502699534006d876a5ebb632843012
Reviewed-on: https://gerrit.chromium.org/gerrit/11980
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/cellular.cc b/cellular.cc
index c92355b..6912ff2 100644
--- a/cellular.cc
+++ b/cellular.cc
@@ -39,6 +39,7 @@
 namespace shill {
 
 const char Cellular::kConnectPropertyPhoneNumber[] = "number";
+const char Cellular::kPropertyIMSI[] = "imsi";
 
 Cellular::Operator::Operator() {
   SetName("");
@@ -209,7 +210,7 @@
   DBusProperties::GetString(properties, "carrier", &carrier_);
   DBusProperties::GetString(properties, "meid", &meid_);
   DBusProperties::GetString(properties, "imei", &imei_);
-  DBusProperties::GetString(properties, "imsi", &imsi_);
+  DBusProperties::GetString(properties, kPropertyIMSI, &imsi_);
   DBusProperties::GetString(properties, "esn", &esn_);
   DBusProperties::GetString(properties, "mdn", &mdn_);
   DBusProperties::GetString(properties, "min", &min_);