Rewrite expression classes.

The new classes behave more like real ASTs: they just carry the data and do not
have extra virtual functions that should be implemented as visitors. The only
virtual function the expression node classes still have exist so that they
can model certain concepts.