Implement sceDmacTryMemcpy(), improve sceDmacMemcpy()

This mostly adds errors and rescheduling.

Doesn't actually block properly when two threads run a sceDmacMemcpy() at the same time, which doesn't really matter since in our implementation both complete "immediately."  Theoretically, they could be done asynchronously on e.g. the GPU thread.

While looking into this, I looked into the VRAM mirrors.  It seems like +6MB is a direct mirror of +0MB, and +2 and +4 are swizzled/interleaved in different ways.  CPU access with fastmem off will use one slice of 2MB VRAM for all four mirrors, and most things use GetPointer() so they'll be the same... except CLUT reads.

-[Unknown]