Caching support for MetaDataCollectors

Used Guava MapBuilder for creating a Map with Weak values, so that if
the values are not used anywhere then GC can collect them when required.