get underscore from a better place
operators (add, sub, mul, div) now work on shade functions, the 'obvious way': Shade.add(f,g)(x) = Shade.add(f(x), g(x))
fix operator lifting of functions so they return shade expressions
use lifting for light combination