[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.
 - I think `Statistics` might be a better name than `Estimates`.  This is because eventually I think this class will also contain things like per-column information like # of distinct elements, or even histograms.
 - What do you think about making this a case class?  I think there are two advantages here over the current scheme:
  - Two levels of lazyness might be overkill.
  - With case classes, propagation could be done using a copy constructor, changing only the required values.  I think this might become more important as we add more fields to this class.
  - It would prevent a proliferation of anonymous classes.