Start with sceIoOpenAsync() cleaning up async io.

Now it actually fires the callback as necessary.  Some games care.
Tests show async result is a sign-extended s64.

Errors become fffffff80010002, etc.
Correctly notify callbacks on sceIoCloseAsync().

And remove defAction, it was the wrong way.
sceIoLseek() should sign extend error codes.

< 0 means error, and 0x0000000080000000 is not < 0.
sceIoRead() always reschedules, and handle async.

Tried to estimate some rough timing.  Fixes Unchained Blades.
Make async IO actually wait for completion.
Make sceIoLseekAsync() etc. work better + cleanup.

No need to have this logic duplicated.
Reschedule in sceIoLseek() etc.

Also make it so we can return u64s easily in places...
Clean up sceIoIoctl() async and add delay.

A low estimate based on tests.
Cleanup some sceIoDevctl() umd commands.

Based on tests.
Add a few more umd devctl commands.

With help from jpcsp and testing.
Add a memory stick devctl to check writable.

Final Fantasy 4 seemed to want this.
Add delays for open, close, and getstat.

Actual delays for these seem much higher, but not sure.
Reschedule / async in sceIoWrite as well.
Add io delays to some misc io funcs.
Add delays to sceIoDread(), which needs them.

Only the first time though.
Simplify hleDelayResult()'s handler a bit.
Android ui tweaks
gpu: unbind stuff that might get deleted
Just a restart warning in the ui