A ModuleInfo stores general information about a module, including:
ModuleId: a unique identifier for the kind of module
Module type: whether it's a source or manipulator
Display name: for showing to a user
Description: so a user might quickly understand what the module does
Capabilities: a list of Strings that document some of the capabilities of
the module being configured.
A ModuleProperty is a key/value-list pair used to provide configuration
information about a particular module (such as a content source or output
destination).
A ModulePropertySpecEnumValue contains one possible enumeration value
when defining possible values for a ModuleProperty in a corresponding
ModulePropertySpec.