[SQL] Prototype implementation of size estimations for Catalyst logical plans.

The idea is that every Catalyst logical plan gets hold of an Estimates class, the usage of which provides useful estimations on various statistics. See the implementations of `ParquetRelation` and `MetastoreRelation`.

This patch also includes one usage of the estimation interface -- namely, use physical table sizes from the estimate interface to convert an equi-join to a broadcast join (when doing so is beneficial, as determined by a size threshold). 

This PR still needs some cleanups, but just want to put it out here first to gather feedback on the interface & high-level approach.

TODOs:  
- [x] Add a separate test suite & improve test coverage.
- [x] Support `ParquetRelation` in the aforementioned BHJ optimization.
I agree. I'd like to add 2 more concerns :)
* zero maybe means the zero record of an input table, we probably need to take some other default value, or like Hive does, to add an new option like "set hive.auto.convert.join=false;"
* size estimates interface is very helpful for cost based join optimization (join reordering), besides the BroadcastNestedLoopJoin, we can also use that for equi-inner-join(we always prefer the bigger table as streaming table and the smaller one as build table). just make sure you didn't misunderstanding what I suggested in the top comment of this thread.