scene: Update surface texture in preprocess()
If two items display image data, the item renderer needs to special case each item. It's not an extensible design, and my long term goal is to introduce a separate tree specifically to solve this problem and also help with computing the repaint damage automatically, instead of issuing scheduleRepaint()s manually.
The first step is to refactor the item renderer so it merely takes the input data and renders it. At the moment, it's not exactly the case because surface textures are updated while painting the items, which inherently requires special casing. This change moves surface texture update code to the surface item so it's easier to refactor rendering code in the item renderer.