renderer: work around reference counting bug in Cairo
renderer: work around reference counting bug in Cairo

Previously the output surface was created directly from a numpy array's data. It would appear that some reference
somewere is not held since that data buffer goes away after this function exits. (Or, as I suspect, numpy will just free
data as it sees fit ignoring who may have got a reference to the array's data member.) Work around this by creating the
image surface directly and instead cause numpy to use an array which is a view into that data. This is just as efficient
(I think) and is memory safe.

rjw57/foldbeam,rjw57/foldbeam,rjw57/foldbeam,rjw57/foldbeam