dzn: Add support for queries
I wish the implementation was simpler, but unfortunately, the vulkan and d3d12 query APIs are quite different:
- vulkan users can get query results outside the command buffer
- vulkan allows query begin/end and copy-results to be in different command buffers, thus forcing us to keep track of the query state
- vulkan has the concept of availability which is an extra word encoding whether the results are valid or not
- vulkan API allows the use to provide a stride along the result buffer
- vulkan API allows non-blocking result retrieval
All these differences force us to keep track of the query state and do extra copies.
based on !49 (merged)
/cc @lfrb