shill: cellular: Add MobileOperator class.

MobileOperator handles the database lookups necessary to reflect the
correct mobile operator information based on OTA and SIM based updates.
This class caches all the data needed and will allow us to remove similar
duplicate logic from the capability, device, and service classes. The
interface is very simple, so the implementation of this class can be
changed to accomodate different prioritizations of various data sources
(SIM, OTA, databases, etc) without having to touch other files, once
this class is used by the shill cellular code.

MobileOperator does the following:

  - Look for database matches for a given operator code both in
    CellularOperatorInfo and in mobile_provider_db.
  - On OTA updates, update the OLP, APN list, and the serving operator.
  - On SIM updates, update the home provider.
  - Notify observers of any changes through its Observer interface.

BUG=chromium:298408
TEST=Build and run unit tests.

Change-Id: I59c6c2b869f0b52dd15cb6b9e3bda104a7bf6a1a
Reviewed-on: https://chromium-review.googlesource.com/171805
Reviewed-by: Prathmesh Prabhu <pprabhu@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Queue: Arman Uguray <armansito@chromium.org>
Tested-by: Arman Uguray <armansito@chromium.org>
diff --git a/cellular_operator_info.h b/cellular_operator_info.h
index 67a9f03..abb5f4e 100644
--- a/cellular_operator_info.h
+++ b/cellular_operator_info.h
@@ -131,6 +131,7 @@
     friend class CellularOperatorInfo;
     friend class CellularOperatorInfoImpl;
     friend class CellularCapabilityUniversalCDMATest;
+    friend class MobileOperatorTest;
     FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
                 CreateFriendlyServiceName);
     FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,