Reduce time spent in CatalogServer heatbeat processing

This change reduces the time the catalog server spends processing heartbeats.
Specifically, it moves the work of actually building the updates to the
catalog_update_gathering_thread_. The gathering thread now produces a vector of
TTopicItems that can be directly applied in the heartbeat thread.
Also adds a new stats metric to track how much time was spent building/processing these
updates: 'catalog-server.topic-processing-time-s'

A few other improvements:
- If the catalog version has not changed since the last update, do nothing. This takes
  the steady state CPU usage down to near zero.
- Use boost::unordered_set rather than std::set for tracking existing catalog objects.
- Reuse the same serializer object for all updates.

Change-Id: I56b9b0443aa0b3d4c841a81942dd5faff67bfd99
Reviewed-on: http://gerrit.ent.cloudera.com:8080/1641
Reviewed-by: Lenni Kuff <lskuff@cloudera.com>
Tested-by: jenkins