Fix GPU/HW synchronization

Due to Citra being an HLE emulator, hardware synchronization is inherently inaccurate. Previously, Citra was not able to synchronize the GPU effectively for both homebrew (libctru) and retail applications. These changes are a result of my testing of many applications (both homebrew and not) and finding the current best-case balance of simulated timing. This PR significantly improves compatibility at this time, however these changes will likely evolve as we better understand GPU/synchronization.
I would say it's not a safe assumption at all until we have a proper picture of how GSP internal code plays with interrupts triggered by the hardware to get proper synchronization on things.