Make expression inversion a bit smarter

Expressions are now walked, inverting the
whole tree, instead of wrapped in a NOT expression.

This is to produce a cleaner expression tree
for EntityFramework, which produces poor SQL
when faced with complex NOT expressions.