Add a setting to launch a separate CPU thread.
Add mutex locks around list management.

This way we can safely execute lists on a separate thread.
Add a simple message event system to the GE.

With this, the CPU thread feature now mostly works.
Add a way to synchronize with the GPU thread.
Bail when CPU thread disabled to ensure good perf.