Add lazy evaluation support to expression functions and if function

Adds lazy evaluation support for functions to QgsExpression. Lazy functions are passed the expression node rather than the result. Functions can decide what to do with each node it is given. 

Also add `if(cond, true, false)` function using lazy evaluation feature. Each branch of the `if` is evaluate as needed rather than up front.