I came across a breaking change in the way expressions are evaluated in memory
when trying out trunk. A null value on the left hand side of a comparison
(ASTGreater in my case) used to cause evaluateNode to return false. Now it
throws an UnsupportedOperationException. A null value on the right hand side of
a comparison used to return false, now it throws a NullPointerException. I'm
not sure how I would get around this without littering all my expressions with
isNotNulls. Maybe Expression.match could catch the exceptions and return false?