WIP: compute shader support
New features centered around compute shaders:
Compute engines can be requested from the renderer. Each compute engine is on a separate hardware compute queue, so it shouldn't interfere as much with the rendering. Compute task can be added to each compute engine. Right now, they must be independent, but in the future, it may be possible to add dependencies. Each compute engine can have multiple compute tasks, which consist of two storage buffers (for input and output) and a compute shader.