Do reclaimation for semijoins specified via "pairs" syntax.

That is, we effectively transform "pairs" whose targetlist only references one
of the join inputs into either lefts or rights, respectively. To enable this,
refactor a bunch of tlist parsing code.