Move Expression::interpret into a visitor class