Port to the C API of SPIRV-Cross. Unlike the main C++ API, this is expected to be stable, see details at https://github.com/KhronosGroup/SPIRV-Cross
This has the added benefit of not having to deal with exceptions as we now can use spvc_context_set_error_callback to catch errors.
Note that even with the C API, having API/ABI compatibility does not guarantee behavioral compatibility.
We should also convert playground/array.frag into an autotest in order to better test for regressions in QShaderDescription generation.