Stubbed out ydb_join module.

Handles the joining of two diffs.
Initialized internal state of join node.
Defined helper functions for join procedure.

ydb_join:cross_product/3
  takes the signed Cartesian product of two diffs.

ydb_join:merge_tuples/2
  appends two tuples together.
Added support for join operation in planner.
Hackishly get the pids of the left and right join subplans.
Created helper function for retrieving the owner of the diff table.
Attempted joining diffs based on the parity.

Slowly realizing there are way more edge cases than originally
considered. Need to realize the rule to know which output diff to store
the results in.
Defined helper functions for the different join cases.

Supports the following.
  (1) left diff received, join backward with right diffs,
  (2) left diff received, join forward with right diffs,
  (3) right diff received, join backward with left diffs, and
  (4) right diff received, join forward with right diffs
Implemented procedure to evict previous diffs.
Debugged and finished join node algorithm.

Had made the mistake of using the parity to determine whether or not
a output diff should be sent to the subscribers. Whereas, the only
consideration that needed to be made was whether during the backward
join process, if the table had just been created or not.

Also, looks like a couple off-by-one errors with the history size.
Merge branch 'join_node'