[STORM-3565] add support for adding dimensions to metric data points
A dimensional metric collects information into multiple sub-categories (dimensions).
Add an interface IDimensionalMetric extending IMetric in hope for supporting a better fine-grained metric reporting.
DimensionalCountMetric serves as an example for creating and using dimensional metric
Having DimensionalCountMetric is excluding all other IMetric implementations that would required Dimensional implementation.
Re-worked on this PR. My thinking is to add a dimensions field in IMetricConsumer.DataPoint as an additional K-V metadata map. Data points are collected from metric measurement. The optional additional information could be helpful when downstream monitoring system want to organize or group those datapoints.