program: improved design of info dictionaries

instead of requiring the program model to own and create the additional
info instances and passing them to the generic info dictionary instance
creation (which could be problematic if an info instance of the wrong
type for a dictionary is passed), new specific classes were added for
the constant number and string dictionaries where their constructor
creates the appropriate additional info instance

this required the info dictionary base class to delete the additional
info instance, and the destructor of the abstract info class to be
virtual so a derived additional info destructor gets called

access functions for the info arrays were also added to the constant
number and string dictionaries to return the appropriate arrays of the
additional info instances (a type cast was required since the info
dictionary base class contains a pointer to an abstract info instance)