Add test for broadcast hash join and related necessary refactorings:

- Make SparkLogicalPlan a BaseRelation. Moreover, in
  SQLContext#registerRDDAsTable, propagate the new table name to any
  SparkLogicalPlan with an ExistingRdd child. Essentially we are
  treating such a plan as a relation.
- Move all current join related tests into JoinSuite, to prepare for a
  better test framework for join algorithms.
Cut down size estimation related stuff.