Python join

A semi-streaming Python Join operation.

```Python
>>> left = [('Alice', 100), ('Bob', 200)]
>>> right = [('Alice', 1), ('Bob', 2)]
    
>>> L = TableSymbol('{name: string, amount: int}')
>>> R = TableSymbol('{name: string, id: int}')
>>> joined = Join(L, R, 'name')

>>> list(compute(joined, {L: left, R: right}))
[('Alice', 100, 1), ('Bob', 200, 2)]
```

CC @talumbau