WIP expressions.
Merge branch 'master' into expression
Merge branch 'master' into expression
Add the SimpleExpression homomorphism. Not tested yet. This operation is created instead of a regular Expression when the target of the expression is the last variable in the order. It permits to use a much simpler code.
Test SimpleExpression homomorphism.
Merge branch 'master' into expression

Conflicts:
	tests/hom/test_hom_expression.cc
More tests for SimpleExpression.
Still more tests.
Merge branch 'master' into expression

Conflicts:
	tests/hom/test_hom_expression.cc
Finalize previous merge.
More SimpleExpression tests.
SimpleExpression: propagate the visitor in the correct direction when a hierarchical level is ignored. More tests.
Pass shared_ptr by const& rather by copy.
SimpleExpression: use a square union when the values of a visited node are only read.
Implement the complete Expression homomorphism. More tests are needed to ensure that all corner cases are covered.
Expression: correct handling of nested hierarchies.
Pass end iterator as a const&.
Separate Expression tests in two files (simple and complete expressions).
More tests for Expression.
Merge branch 'expression'