topcat: disable plot area selections when no positions plotted
ttools: abstract plotter coord arrangement to new CoordGroup class

The new CoordGroup class now encapsulates all the information about
how the coordinates in a Plotter are arranged and how to find them
in a corresponding DataSpec ginve a corresponding DataGeom.
It also contains some additional information like which coordinates
should trigger a re-range if they are changed.

This refactoring is mainly because the information I require about
coordinate organisation is somewhat miscellaneous, and it's not
clear what is the right API for this functionality.  By abstracting
it out to a class separate from Plotter I can minimise the disruption
required by future changes to the interface.  The particular improvements
this time round is the addition of getRangeCoordIndices, and
tidying up the question of what is a partial coordinate, previously
determined in a hacky fashion, now explicitly stated by the CoordGroup.

The refactoring is not quite complete.  At this commit, ShapePlotter
and some of the related classes still have coordinate DataSpec indices
hard-coded.
topcat: refactor point cloud iteration

Reduce duplicated code and confusion with the new GuiPointCloud class
that handles progress and thread interruption for point iteration
in one place.
topcat: cancel running threads when plot window is disposed
topcat: get TopcatModel from DataSpec the easy way

Just cast to GuiDataSpec, rather than mucking about with LayerControl
internal states.  All DataSpecs in TOPCAT are GuiDataSpecs (though this
is not enforced at compile time).
topcat: fix blob action when no blobs selected

If the blob select button is re-clicked when no blobs have been selected,
it now cancels the blob selection state.
topcat: fix stats window to report mean value for boolean columns

Actually this was a bug - it was reporting a mean value equal to zero
before, because the type switch tested column type for Comparable
before Boolean, and Boolean is Comparable.  Changed order of code
and now works properly.
topcat: rename inadvertently overridden "getName" method

SyntheticColumnQueryWindow.getName was being used for something local,
inadvertendly overriding Component.getName.  Had sat there apparently
harmlessly for years .. but OS X pack() calls getName() and caught
it in an uninitialised state.  Ouch.  Renamed method to something
less generic.
table: fix TST reader so it can read tables with <3 columns

It was trying to read ID/RA/Dec in the first three columns even
if they weren't there.
topcat: handle point clouds differently for counting

Point counting was not working properly, because a count was made for
each point SubCloud, and you could have one of those for each subset.

So introduce a new class TableCloud which contains all the points with
the same position coordinates, but aggregates those with different
subsets.  In this way each position in the point cloud is only
iterated over once.  This fixes errors in the displayed point count,
and also means that other operations that need to iterate over
displayed positions (e.g. blob inclusion) can work more efficiently.
topcat: get fromVisible selection working for partial positions

Histograms and Spectrograms have "partial positions" - their data
points have NaN values on at least one axis.  It still makes sense
to allow selection of the points from the visible range of the plot.
Fix it so that this can be done by handling partial positions
explicitly in the fromVisible scans, which is now separate from,
but shares code with, the blob shape scans.
topcat: move StackPlotWindow.PositionIncluder to PositionCriterion

Refactor to an external class to be more tidy and for re-use of
implementations.
topcat: plot position count report now includes partial positions

Histogram plots etc now are included in the count of points reported
at the bottom of the plot window.