Implement equals and hashCode for expressions.

Proper equals/hashCode allows to detect duplicate expressions in BlockBuilder.
All the Expressions/Statements implement typical equals/hashCode provided by IntellijIDEA
ParameterExpression implement identity equals/hashCode

Hash codes for complex expressions are cached into a field of the expression.