Added support for Theta-Join processing & Code Clean-up

* Added support for Theta-join porcessing by introducing static and
adaptive Theta-join operators. The operator enables general online join
processing on large continious streams of data. It can adaptively and
efficiently harness data parallelism in distributing the workload among
machines while minimizing storage and network bandwidth costs and
maximizing resource utilization. Additionally, it is skew-resilient and
content-insensitive.

* Added some query plans examples that run arbitrary joins on TPCH data.

* Added support for spilling on disk. Merged with BerekelyDB which is
an efficient backend key-vale store.

* Code clean-up.