[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.
We should definitely decide how much of the estimates framework we'd like to implement in this PR. Existing RDDs do not have meaningful estimates in the current version of this patch. 

As for what default value to use,  I think 10000 is what Hive is using (see [here](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization)).

Lastly, we should also think about the default Estimates: currently it is a sum of children's estimates, but for joins we'd like it to be a product -- yet we have to be careful when 0 appears in a child's estimate.