Threading part 2

This adds more advanced threading support - specifically better handling of events and mutexes. This enables mutexes/events to now actually block and a correct context switch to occur. Also adds some stubs for missing SVC functions (DuplicateHandle, SleepThread). Fixes some bugs with how we do context switching. Adds a hack to set the GSP event to always signal "ready for more data".
I think the second example is clearer, but is it safe?  (that is, won't ```type == t->wait_type && handle == t->wait_handle``` still get evaluated even if t is ```nullptr```?)