IGameEngine uses Tasks instead of WaitHandles

This could be a problem for cross AppDomain communication, but
cross AppDomain communication still has to deal with the overhead
of all the event serialization, which is currently deemed too high.

This change has one big benefit: if the running task has an exception
(such as system throwing), then the main thread will actually see
the exception, instead of it being silently ignored.
Trigger.* now implement ISystem

This means you cannot create a system trigger without being a
system.
Remove race condition where task was not cleared
Simplified the chat API

There is no longer a player relation API (which enabled sending
to your 'enemy'); instead you can now just specify what players to
send your chat message to directly.
Better error message for not-implemented code
Better debug info
Systems now can access SingletonEntity whenever

This makes the singleton entity much more useful as a repository
for global data in the game.
SingletonEntity renamed to GlobalEntity