ttools: taplint now checks for the correct ObsCore ID URI

The taplint OBS (ObsCore) validation stage checks whether the capabilities
reports implementation of the ObsCore DM before attempting ObsCore-specific
tests.  The old check unfortunately tested for the wrong string:
"ivo://ivoa.net/std/ObsCore-1.0" instead of
"ivo://ivoa.net/std/ObsCore/v1.0".
This error was propagated from example text in the TAPRegExt 1.0 standard
document.

Now, it checks for both strings, and reports a warning if it finds the
wrong one, though it takes either, or in fact anything with the
(case-insensitive) string "obscore" in it, as license to do the ObsCore
tests.

It also now tests the ObsCore ID case-insensitively, since Markus points
out that IVOA Identifiers 1.12 says all IVO IDs are to be considered
as case-insensitive.
topcat: refactor CoordPanel/PositionCoordPanel

PositionCoordPanel was an interface with a wrapper implementation
rather than an extension of the CoordPanel class, which was silly.
Made it sensible; less jumping through hoops required.
topcat: simplify the way coordinate autopopulation works

CoordPanels now have their coordinates filled in to sensible default
values only when explicitly commanded to by GangLayerControl,
rather than autopopulation being a property of the coordpanel itself.
This is more sensible and easier to manage.
topcat: rearrange plot window instantiation

TopcatWindowAction is generic-ised better, which allows it to be re-used
for new- and old-style plot windows.  New-style (plot2) plot windows
no longer add a default control in their constructor, this is handled
by the ControlWindow.  That makes it possible to construct a plot
window without a default control.
ttools: generate multi-coordinate coord names consistently

Add a new method PlotUtil.getIndexSuffix which is used consistently
wherever multi-position coordinate sets are used.  This allows them
to be identified by name without guesswork.
ttools: make certain ShapeForm implementations effectively @Equality

SizeForm and PairLinkForm are now singletons.  MarkForm overrides
equals and hashCode.  This is so that certain distinct but equivalent
ShapePlotters can be identified as the same, though neither MarkForm
nor Plotter is currently declared with the annotation @Equality.
This is used by MatchPlotter so that adding layers can be done by
inserting layer attributes into existing layers, so it makes it
tidier rather than being essential.  Maybe declare MarkForm as
@Equality at some point, it could be done.
ttools: use static instances for plot modes

Plot Modes as used in various plot types are now taken from static
members of the ShapeMode class rather than a new (stateless) instance
each time, which is a bit tidier and makes it easier to distinguish
whether two modes (hence Plotters) are the same.
ttools: permit to set an unlisted value in a ComboBoxSpecifier

ComboBoxSpecifier now has a construction option that configures what
happens when you try to set a value not listed in the associated combo box.
topcat: add ControlManager.addLayer method

It is now possible programmatically to add a plot layer to a current plot,
just as if it had been added by user GUI actions.
A LayerCommand object is used to specify the new layer.
topcat: addLayer now throws an exception on failure

New LayerException is thrown, instead of just not doing it, if the
layer can't be added.  This is sensible since the reason may be
informative and not obvious, and can/should be communicated to the
user who may either be a GUI-facing human or a SAMP client.
topcat: add plot result button to pair match plots

You can now hit a button when a pair match is completed and see the
input catalogues and output links.

So far it only works for pair matches, mainly because the pair link
information is not present in the result tables for single- and multi-table
matches, which means it's impossible(?) to get set up the GUI to do
the right plots.  It would be possible to do the right plots
programmatically using the calculated links - maybe do this in the future.