ttools: adjust axis pan/zoom to avoid huge/tiny values

The Axis pan/zoom methods will now operate as no-ops in the case that
the output ranges would hit the limits of the double type,
i.e. if the exponent or mantissa runs out of bits.  This avoids
some problems to do with attempting to zoom in or out a ridiculous amount.
ttools: avoid arithmetic overflows when calculating axis tick marks

Reorder the expressions.  Actually, it's clearer this way too.
ttools: treat logs of negative values correctly in plots

Because I currently treat graphics coordinates as integer values in plot2,
graphics positions corresponding to logs of negative values were getting
calculated as NaNs and then turned into integer zero values by casting
NaN to int.  Although most such NaN coordinates were thrown out before
plotting, some, such as error bars terminating below zero on logarithmic
axes, were getting shown (since in this case Surface.dataToGraphics is
called with visibleOnly false), in obviously anomalous places.

Fix the code to check for NaNs before int casting is done.

This leaves the somewhat related problem that negative sense error bars
that would extend to negative values will not be displayed if the
relevant axis is logarithmic.  Probably it would be better to extend
them down infinitely.  This doesn't look very easy to fix; wait until
somebody complains till I worry about it.
topcat: refactor clicked point identification

Pull out the code which identifies which point(s) are near a clicked
position in topcat, and put it in ttools.PlotUtil for use elsewhere.
ttools: add point selection machinery to PlotDisplay

You can now add PointSelectionListener objects to the PlotDisplay component.
These listeners are messaged with the points near the indicated
graphics position when the user clicks on the plot to select a point.
ttools: adjust plot2 examples for clarity

Declare PlanePlotter.createPlotComponent in the example plot2 classes
to return a PlotDisplay not just a JComponent.  This makes no difference
to the behaviour of the example application, but it makes it a bit
clearer what the capabilities of the plot component are.