1. Provide default implementation of HandleReceive() for UdpServer
   that enqueues a Reader task to perform the receive similar to
   TcpSession. The task policy of the Reader task can be
   overridden by the derived class. Add a virtual OnRead()
   function that needs to be implemented by the derived class
   using the default implementation of HandleReceive().
2. Rename TcpServerSocketStats to SocketIOStats, move
   SocketStats from within TcpServer to io_utils.h and share
   between TcpServer and UdpServer.
3. Change ProtobufServer to use changes done above in UdpServer.
4. Add test case to UdpServer and stabilize existing test cases
   in udp_io_test

Change-Id: Ic9a2af9ded1ab7670cf5d1124a48083300db440b
Merge "1. Provide default implementation of HandleReceive() for UdpServer    that enqueues a Reader task to perform the receive similar to    TcpSession. The task policy of the Reader task can be    overridden by the derived class. Add a virtual OnRead()    function that needs to be implemented by the derived class    using the default implementation of HandleReceive(). 2. Rename TcpServerSocketStats to SocketIOStats, move    SocketStats from within TcpServer to io_utils.h and share    between TcpServer and UdpServer. 3. Change ProtobufServer to use changes done above in UdpServer. 4. Add test case to UdpServer and stabilize existing test cases    in udp_io_test"