[SPARK-2393][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.
A few notes here:
 - I think the most important thing about any default values that we set is that they work together correctly.  For example, we probably want the default size for RDDs to be large enough that they do not get broadcast using the default value.  For this reason we probably want to have one central location where defaults are set (probably in SQLConf).
 - Since RDDs are immutable, it may be possible to augment things so that we gather simple statistics the first time the RDD is queried, perhaps using an accumulator.  This however does not need to be done in this PR.  I would make a note of it though.
 - Regarding joins: for inner joins if one side is actually zero then the join will yield no results.  For outer joins the maximum possible output cardinality is the cardinality of the non-empty relation.  However, zero is kind of a weird estimate as if it is wrong it will really throw things off.  For this reason maybe we should consider 1 to be the smallest possible cardinality estimate.