Use Numpy and Cython, implement set_vertex_data on surfaces

There is a bug in shader compilation stage
Fix one bug with shader compile stage: don't signal unless other thread is waiting

There is still an issue with compilation of the fragment shader
Fix the other bug in shader compilation

The issue was that shaders can still link even when the fragment shader
failed to compile. So we need to check separately that all the sources
compiled. We also put in error reporting for each shader stage here.