fits: add BasicInput framework for primitive stream input

Add the interface BasicInput along with implementations and factory
classes, providing an alternative mechanism for reading primitive
values from a byte sequence.

The previous mechanism used the java.io.DataInput class, whose usage
was inherited from the nom.tam.util classes.  Although nom.tam.*
is still in some use in this package, for bulk data access custom
classes are now used.  Abstracting required input methods to a
custom interface makes it clearer what methods are actually used
by the FITS table reader classes, so I can be sure these are
implemented optimally (the performance of these classes are core to
the performance of STIL on large tables).

The new mapped I/O implementations added here are, unlike the
previous ones, capable of relinquishing MappedByteBuffers during
the lifetime of a reader.  It looks like this is necessary on
some platforms to prevent system lockup from overmapping of memory.

This commit does not yet incorporate use of this new infrastructure
into the FITS reader classes.
fits: rewrite binary table input to use BasicInput classes

BintableStarTable is rewritten to use the BasicInput interface
for primitive data input rather than the ArrayDataInput abstraction.
This provides more control over release of resources.

The implementation has also changed to make more careful use of
data accessors - there is one thread-unsafe data reader for random
access (if provided), and one for each RowSequence, rather than
having a single MappedByteBuffer (or group of them) for random access
that needs synchronization.  That should give (and tests show that it does
give) improved performance, as well as a more obviously thread-safe
implementation.

This also allows less baroque use/re-use of input streams in the
FitsTableBuilder class, when pulling table data out of the input stream.

Quite a bit of reworking was required.
fits: rewrite colfits table input to use BasicInput classes

ColFitsStarTable is reworked to use the BasicInput interface for
primitive data input rather than MappedFile/MappedMultiFile.
This provides more control over release of resources.
It is more flexible (now it copes with stream input as well as
uncompressed files on disk, though using it like that is not necessarily
a good idea).

The implementation has also changed to make more careful use of
data accessors - there is one thread-unsafe data reader for random
access (if provided), and one for each RowSequence, rather than
having a single MappedByteBuffer (or group of them) for random access
that needs synchronization.  That should give (and tests show that it does
give) improved performance, as well as a more obviously thread-safe
implementation.

Quite a bit of reworking was required.
fits: document FITS input changes in stilts/topcat user docs
fits: add startable.unmap system property

The new startable.unmap system property should not be needed, but it's
added as an off-switch in case one is required for the MappedByteBuffer
unmapping machinery in the FITS package, related to the reworking
of the mapped file access.  Since the unmapping is dangerous
(could in principle cause JVM crashes if I haven't done it right),
it's a good idea to have a backup plan.