Small step towards semi join. Added semi join functions.
TODO: Special exec strategy (runtime + optimizer) based on hash join required.
      Either no duplicates of filtering side in HT or filtered tuples removed from HT after first match.
Updated TypeExtractor and TupleTpyeInfo to work on subclasses of Tuple1, Tuple2, ...
local version of Triangle enumeration (working)