Phoenix 180

First revision for review.  There are some open points here.  Still no test case added to consume the stats.  Will do the performance test once the system is available with me.
So this put that we make should have a timestamp (the current ts) added with it or leave it to the server to add it.

    // Query for the latest table first, since it's not cached
            table = buildTable(key, cacheKey, region, HConstants.LATEST_TIMESTAMP);
            if (table != null && table.getTimeStamp() < clientTimeStamp) {
                return table;
            }
            // Otherwise, query for an older version of the table - it won't be cached
            return buildTable(key, cacheKey, region, clientTimeStamp);

Suppose we add a cell (empty cell) so that we can udpdate the cache, still the above code will not allow to do that because before the first 'if' we try to use HConstants.LATEST_TIMESTAMP and inside buildTable() we were were updating the metaDataCache for the table with the timestamp of the cell that we created. (fine till here) but the if conditon would fail because table.getTimeStamp = the timestamp of the emtpy kv and the clienttimestamp = 130 (for eg). So it goes into the second build table. There the passed timeSTamp = 130. So we create a PTable instance but with its timestamp as 130 and we don't udpate the metadatacache. As this table (with ts = 130) is returned out 

                if (table.getTimeStamp() != tableTimeStamp) {
                builder.setTable(PTableImpl.toProto(table));
            }
before building the PTable from the protos we check for the existing time stamp and the table's timestamp both of the matches and we end up in no created the table from the proto.  This internally means that for the FromCompiler the table ref is not updated with the latest.