Raise OPIShell to top if already open.

The OPIShell must have a unique path and macros.
In order to do this:
 - maintain a cache of open OPI shells.
 - rename runEdmShell() to openOPIShell() for consistency
 - make the OPIShell constructor private so that the only way
   to create an OPIShell is via the static method openOPIShell()
Move Display ID counter to DisplayModel.

This allows automatic incrementing for OPIShell.