Implement evaluation for joins

Currently it's a little clunky, since we make row-specific contexts all over the
place when we could probably get away with regular tuples, but it seems to work.