UsageStats: track more information

Specifically, let's track name, label, description and version.

From a performance perspective, for each identifiable object (e.g., a
ModuleInfo) we only need to interrogate and set this information once
(until statistics are flushed), so hopefully it does not add too much
overhead.

The alternative -- reconstructing the information after the fact --
is tough because the framework lacks a unified way of looking up objects
based on their identifiers. It is not required for Identifiable objects
to register themselves in any way, so it may not be possible to learn
anything else once the usage event is reported to the service.