Improve some scheduling issues, deny many waits inside interrupts

This fixes several things:

 * If a thread was terminated/ended while waiting, it could've been "brought back to life."  I found this mainly when force-killing threads for debugging purposes.
 * sceKernelDisableSubIntr() was not actually disabling anything (fixes intr/vblank/vblank.)
 * Better error codes when inside an interrupt or they're disabled, and don't do things in these cases that shouldn't be done.
 * Disables several functions while an interrupt is running, and returns better error codes.

I only tested a handful of games but they all work fine still.  I kinda expect this to break things and fix things... but it is all per tests.

-[Unknown]