rusticl: fix non blocking maps and GPUs with discrete VRAM
I still plan to add proper documentation to the code and commits, but for everybody wanting to make things run on discrete GPUs, this is a must have.
This fixes some corner case problems with non blocking memory maps, but also adds shadowing of unmapable resources (e.g. tiled images). The old code relied on drivers pipe_transfers
to get this right, but OpenCL requires us to be more explicit about when do synchronize transfers and the real resource.
So in order to change that a shadow staging coherent resource will be used, which can be directly mapped and accessed.