Cache surface textures on the GPU to eliminate duplicate uploads.
At the moment GLRenderer is unconditionally uploading a new copy of every visible surface to the GPU, on every frame. This branch changes that to only upload textures for visible surfaces when they change.
In a realistic GUI with multiple surfaces where most of them don't change on every frame, this eliminates most of the texture copies. So performance with multiple visible surfaces should be greatly increased.
Also resolves bug: LP: #1263592. Fixes: https://bugs.launchpad.net/bugs/1263592.
Approved by PS Jenkins bot, Alexandros Frantzis, Alan Griffiths, Robert Carr.