shill: Add IP Address tracking to DeviceInfo

Subscribe to IP Address messages in DeviceInfo, and create a
per-device list of assigned IP Addresses.  Provide a method
to flush all globally scoped addresses from a device.

As a result, we can now flush assigned IP addresses when a
Connection is terminated.  There is also some incidental cleanup
in RTNLHandler to remove some vestiges of hand-baked RTNL
message encoding.

BUG=chromium-os:19744
TEST=Run new unit tests.  Test using ethernet on a netbook to make sure
addresses are added and removed correctly.

Change-Id: I63fd09088e71c43cb1f11a89a8ef15e11074976c
Reviewed-on: http://gerrit.chromium.org/gerrit/7180
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/mock_rtnl_handler.h b/mock_rtnl_handler.h
index b4b124b..de96ff8 100644
--- a/mock_rtnl_handler.h
+++ b/mock_rtnl_handler.h
@@ -23,10 +23,11 @@
   MOCK_METHOD3(SetInterfaceFlags, void(int interface_index,
                                        unsigned int flags,
                                        unsigned int change));
-  MOCK_METHOD2(AddInterfaceAddress, bool(int interface_index,
-                                         const IPConfig &config));
+  MOCK_METHOD3(AddInterfaceAddress, bool(int interface_index,
+                                         const IPAddress &local,
+                                         const IPAddress &broadcast));
   MOCK_METHOD2(RemoveInterfaceAddress, bool(int interface_index,
-                                            const IPConfig &config));
+                                            const IPAddress &local));
   MOCK_METHOD1(RequestDump, void(int request_flags));
   MOCK_METHOD1(GetInterfaceIndex, int(const std::string &interface_name));
   MOCK_METHOD1(SendMessage, bool(RTNLMessage *message));