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.
I think there should be ENSURE_NO_EVAL_ERROR also after node->eval() calls.
Otherwise the PR looks good to me.