Generalise CustomNode to other backends; support precompiled pyopencl.Kernel instances