shill: Hide netlink sequence numbers and headers from users

Hide details of the netlink protocol from creators of nl80211 messages
to simplify the process of sending messages to the kernel.  This changes
the process to send a message and set a callback from:

KernelBoundNlMessage message;
// ... populate message with fields
message.AddNetlinkHeader(&socket_, 0, NL_AUTO_SEQ, 0, 0, 0,
                         CTRL_CMD_GETFAMILY, 0));
Config80211::GetInstance()->SendMessage(&message, callback);

to:

KernelBoundNlMessage message(CTRL_CMD_GETFAMILY);
// ... populate message with fields
Config80211::GetInstance()->SendMessage(&message, callback);

BUG=chromium-os:36122
TEST=Unit tests

Change-Id: Id0bc931b6952fc0eafdf73499c1b48d550575fce
Reviewed-on: https://gerrit.chromium.org/gerrit/37724
Reviewed-by: Wade Guthrie <wdg@chromium.org>
Commit-Ready: Christopher Wiley <wiley@chromium.org>
Tested-by: Christopher Wiley <wiley@chromium.org>
diff --git a/nl80211_socket.h b/nl80211_socket.h
index cc8823b..f7d4408 100644
--- a/nl80211_socket.h
+++ b/nl80211_socket.h
@@ -34,6 +34,7 @@
 #include <base/bind.h>
 
 #include "shill/netlink_socket.h"
+#include "shill/kernel_bound_nlmessage.h"
 
 struct nl_msg;
 struct sockaddr_nl;
@@ -65,6 +66,8 @@
     return Nl80211Socket::kSocketFamilyName;
   }
 
+  virtual uint32 Send(KernelBoundNlMessage *message);
+
  private:
   // The family name of this particular netlink socket.
   static const char kSocketFamilyName[];