MVKDeviceMemory track original Vulkan memory coherency request, not just Metal
coherency status.
MVKDeviceMemory map() and unmap() only triggers host flush if coherent Vulkan memory
was requested, not just when Metal memory is coherent, because this can be changed
for dedicated image resources.
Redesign MVKDeviceMemory flushToDevice() and pullFromDevice()
to be consistent operation with each other.
Don't trigger automatic texture flush during vkCmdCopyImage(), as it can
cause an unexpected update from mapped memory, resulting in a race condition.