Daravind/Catalog metrics storage

CatalogMetricsStorage

1) Added support to Metrics Service to store metrics in a Catalog
2) CatalogMetricsStorage only writes to Catalog from 1 (background) thread by using a ConcurrentQueue
3) Also, using 'ShouldUseDBAndCatalog' setting, metrics may be written both to DB and Catalog
4) Following settings are supported as well
     i) IsLocalCatalog - uses filesystem
     ii) CatalogPageSize and CatalogItemPackageStatsCount to determine how the Catalog is built
The only case for having any kind of timer is to flush in-memory state if there is a period of inactivity. And even doing that is a P2 because this is a best-effort guarantee.

In the main code path there should be no Sleep statements and no attempts at reserving background threads. The model is far simpler (and more efficient) something like: when the buffer is full, post the work to be done onto the thread poll.