o.c.opibuilder: added OPIShell

Add action for opening OPI shell and add that action to
WidgetActionFactory.java.

Squashed with bug fix commits:
Edm Mode: Fixed bug in OPIShell resizing
EDM Mode: Fixed bug where shell wasn't raised to the top
o.c.opibuilder: allow ScriptUtil.close() to close OPIShell

This uses a dedicated close method that takes the current widget
as an argument which is then used to determine the correct shell
to close.
o.c.opibuilder: add PV name to pastebuffer if widget is middle-clicked
o.c.opibuilder: only zoom in and out buttons on OPIView toolbar

Having all the zoom controls frequently means that they are pushed on to
a new line, disrupting the display.
o.c.opibuilder.widgets: Changes to Byte Monitor

Use forground colour for border, and set to 1px
o.c.opibuilder: Added right click menus in OPIShell
o.c.opibuilder: Added option to hide compact and full screen menu items
o.c.opibuilder: Start OPI Shell from launcher.openFile if it is passed in as a macro
o.c.opibuilder: 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()
o.c.opibuilder: Move Display ID counter to DisplayModel.

This allows automatic incrementing for OPIShell.
o.c.opibuilder: Attempt to account for unreliable behaviour when opening shells

Sometimes when a new shell is opened it doesn't receive the shellActivated
callback. Also raising a shell doesn't always work once it's already open.
These changes mitigate these effects to some extent.
o.c.opibuilder.editor: Run OPI Action now opens in same window
o.c.opibuilder.editor: Add right-click Edit OPI functionality
o.c.opibuilder.editor: Extend right-click EditOPI to handle OPIShells