Outer join handles case when both are empty

- If we are doing an outer join (K, A) x (K, B) by itself then it makes sense to assume that either A or B must exist for every key, but when composed with subsequent joins it is possible to get a key for which both A and B would be empty and the correct interpretation is to return an empty iterator (previously would do (None, None))