Add parameter manager.

This functionality was previously part of the ParmLinkMgr.  This adds a
dedicated parameter manager which is not only usable by parameter links.
Convert ParmLinkMgr calls to ParmMgr.

Step two in the split of ParmLinkMgr.  This change converts all appropriate
calls to the ParmMgr introduced by the previous change.
Remove ParmMgr functionality from ParmLinkMgr

Step three in the split of ParmLinkMgr.  This patch removes the now
duplicated functionality from ParmMgr.
Apply user parameters first in batch mode.

This change moves the application of user parameters to be the first
operation in batch mode.  That way, all geometric operations applied
later will correctly reflect the user parameter setting.
Move control of rebuilding the parameter set to ParmMgr
Move control of removing parameter references to ParmMgr.
Introduce parameter picker GUI.
Introduce lightweight parameter holder.

This class simply holds a pointer to a parameter.  This class will later
be extended to contain other information relevant to a list of parameters.
However, by using this simple holder class, the add/remove semantics can
be consistent.
Convert parameter picker to use list of ParmHolder.
Change ptrID to be based on rand() instead of memory address.

ptrID needs to be changed to be constant and hopefully unique over the
life of an object -- to stay the same over the course of file load/save
and other operations.  Setting ptrID based on the memory address of the
object runs the risk of collisions.

This change converts initialization of ptrID to be based on a random
integer.  The random number generator is seeded in main() based on time()
which returns the number of seconds since 1/1/1970.
Fix bug in reading WakeActiveFlag.
Remove unused Geom::id_num

Geom::id_num appears to go back to the RAM file format days and has been
replaced with ptrID.  However, it was still read/written and carried
around.
Remove unused Geom::id_str

Geom::id_str appears to go back to the RAM file format days and has been
replaced with ptrID.  However, it was still read/written and carried
around.

In addition, the base constructor sets the value based on a timestamp.
Consequently, opening and saving an identical model would result in a
changed file.  Removing this allows files to stay the same.
Make random ptrID creation a lazy operation.

ptrID is only required when files are read and written.  At all other times
the relationships between components are handled through actual pointers.
Introduce resetClipBoardPtrID() for Insert and Paste.

This zeros out the ptrID's of all components on the clipboard.  A zero
ptrID forces a new ID to be created for the component when needed.  This
will occur later, when something is written to file.  All actual
relationships between components are handled through actual pointers.

This causes an explicit paste or insert operation to create new unique ID's
for all the components involved.  This is strictly overly conservative, it
is only required when an ID collision exists.
Check for ptrID collisions on insert and paste

If there are no ID collisions, then there is no reason to force creation
of new component ID's.  This can result in fewer spurrious component ID
changes, which can be nice in certain circumstances.
Merge branch 'UniqueID' into ParmPicker
Add delayed start search for substring.

Stringc::search_for_substring( int istart, char character ) searches for
character starting at position istart.
Update parmPicker UI after File-New.
Add routines for XML Node Attributes that work like existing routines.