Make type operations take positions rather than source nodes.

This convention was established early on while I was still figuring out
how to handle reporting errors with positions attached. We're now
standardizing on passing around positions rather than nodes, since they
are applicable to the whole system while nodes are only applicable to
the parser.
Sanity check that pos_link isn't passed weird things.
Make ValueExpr and SymbolExpr take positions rather than source_nodes.

Initially I thought it would be useful to be able to refer back to the
source for these, but we've never done that so far except in tests.
Instead this is a vote for consistency with all of the other node types,
and with the move towards using positions as the common currency for
retaining source references to include in error messages.