The only place Counters are used is in rendering, for the number of
nodes under a topology, so the overhead of holding a unique data
structure in every Node is unwarranted.
Counters are not set in the probe, so we don't need any
backwards-compatibility in report decoding. Similarly they are not set
until after all nodes are merged, so we don't need that logic.
The fixup() method was modifying a copy of its input, so you could get
duplicate keys in the output. Change it to return the new slice.
Thankfully this is rare: in most cases WithLatests() is called with
fields that are not duplicates of existing ones.