Refactor CGUIWindowManager::DispatchThreadMessages() to be a solid
thread message dispatch and process method.
Add method to remove specified thread message in the message queue.
Fix race conditions after starting flag reset,
make sure play state callbacks are called and only called once.
[Fix] Use shared pointer for the player in CApplication, fix double PlayFile call crash.