gtk: Use cairo surfaces rather than patterns for icons
cairo_pattern_t were used because they also support scaling via the pattern matrix. However, patterns are not a great fit for icons as they are potentially unbounded (i.e. for gradients). So we switch to surfaces, using the device_scale for scaling.