Use actual counter type when registering to monitoring
Having the counters delegate to BufferableCounter constructor for self
registration to monitoring was hiding the actual type of counter to
Entity so part of the customizations were lost (in particular the merge
from JSON).
This MR changes BufferableCounter constructor signature to allow propagation of the final counter type to the Entity constructor. It also extends the unit tests to expose the problem (and validates the fix) of Counter not being recognized as mergeable from JSON.
The drawback is that specializations of BufferableCounter must have a typeString static data member.
Making the self registration constructor protected also prevents issues like that fixed in lhcb/LHCb!3830 (merged).
/cc @sponce