Allow ValueExpr and SymbolStorageExpr to have no source_node.

There's little reason for this in practice, but it's handy for unit tests
to avoid constructing useless throwaway source nodes.
evaluate() for the +, -, *, / and % operators.