The code change is to make it easy to extend DatagramEventListener and DatagramEnqueuer.  It doesn't add new functionalities.

1. made ThreadedEventListener generic, and change enqueuer and dequeuer to be protected
2. DatagramEventListener reuses enqueuer and dequeuer from parent class
3. changed some fields in DatagramEnqueuer to be protected so it can be extended easily.