* Refactor to move Task Queue to its own class
- This is to help with sharing task queue among
multiple message loops going forward.
- currently there is 1:1 mapping between task queue
and message loop, we are still maintaining the semantics
for this change.
* Add mutex include
* Add unit tests for task queue
* fix formatting
* license