Improve the FPL implementation

Key highlights:
 * Implement waits (although reporting hasn't seen any games use them...)
 * Uses a ring to allocate (as the PSP does) rather than giving the same block after a free.
 * Fixes the refer struct, which would've given confusing numbers to games.
 * Implements high mem allocation.
 * Implements block address alignment.
 * Passes all the new FPL tests.
 * Also implements sceKernelCancelMutex(), which passes the test too.

It's possible these changes could fix games that were previously broken (either not getting the right ram, or trying to read the status, etc.), but I don't have any games this fixes.

That said, they are used rather heavily with features that worked before, and my games seem to still work fine.

-[Unknown]