1. Separate out TcpServerManager into a templatized ServerManager that
   is used by both TcpServer and UdpServer since UdpServer was storing
   raw pointers in boost::asio and needed the same functionality.
2. Change SyslogListeners to use composition for SyslogTcpListener, and
   SyslogUDPListener instead of multiple inheritance. Move syslog_test
   from flaky to running in analytics.
3. Add ScheduleShutdown() to WorkQueue which can be called from any
   context and which sets a boolean to perform the WorkQueue
   shutdown on exit from the current runner if it is running. If current
   runner is not running, then it will shutdown the WorkQueue in the same
   context. Added boolean to control if the Shutdown()/ScheduleShutdown()
   routine deletes the entry from the queue.

Change-Id: If90fd277f2e4af6ad3dfa0d9c1d95c649eef014a
Merge "1. Separate out TcpServerManager into a templatized ServerManager that    is used by both TcpServer and UdpServer since UdpServer was storing    raw pointers in boost::asio and needed the same functionality. 2. Change SyslogListeners to use composition for SyslogTcpListener, and    SyslogUDPListener instead of multiple inheritance. Move syslog_test    from flaky to running in analytics. 3. Add ScheduleShutdown() to WorkQueue which can be called from any    context and which sets a boolean to perform the WorkQueue    shutdown on exit from the current runner if it is running. If current    runner is not running, then it will shutdown the WorkQueue in the same    context. Added boolean to control if the Shutdown()/ScheduleShutdown()    routine deletes the entry from the queue."