Ensure commands are not ran async

Plugins calling Player.chat("/foo") or Server.dispatchCommand() could
trigger the server to execute a command while on another thread.

These commands would then process EXPECTING to be on the main thread, leaving to
very hard to trace concurrency issues.

This change will synchronize the command execution back to the main thread, causing a
big slowdown in execution but throwing an exception at same time to raise awareness
that it is happening so that plugin authors can fix their code to stop executing commands async.