virgl: nuanced fixes to transfers
These are nuanced fixes to transfers that feel like brain teasers. They are best reviewed commit-by-commit. It is possible that I miss the pictures in some of them.
The goal is to have a baseline support which we can all be confident in its correctness. Once we have that, I want to refactor and heavily comment the code (we have zero comment currently!). Then we can add more features (staging buffers, buffer respecification, etc.).