Create a File/RandomAccessFile abstraction for sparsebundle interfaces.

This decouples the sparsebundle interfaces from the java.io.File and
java.io.RandomAccessFile constraints and allows us to use sparsebundle
interfaces with sparsebundle data that is not stored in the system's
Java-accessible file system.
It could be supplied over the network or loaded from a location embedded
in a non-mounted file system or image. It's up to the caller to
implement the necessary interfaces.

A default File/RandomAccessFile-backed implementation, JavaFileAccessor,
exists in SparseBundle.java.
ReadableSparseBundleStream.java: Fix bug when reading from token.

We didn't take 'pos' into account when calculating the number of bytes
that can be read from the token. So if 'pos' is non-0, we might request
more data than exists in the token (read beyond end of file).
DMGExtractor.java: Silence warning about raw copy when image is sparse.
DMGExtractor.java: Restructure extractProcedure to clean up on exit.

When we wanted out of extractProcedure we simply called
System.exit(int), which probably cleans up in a primitive way but it
doesn't call the proper 'close()' methods for all affected streams.

So we eliminate the System.exit(int) calls and use regular program flow
constructs, breaking out the main body of 'extractProcedure' to a new
function 'extractUDIF' (which makes sense anyway because
'extractProcedure' should be general, not UDIF-specific). When
'extractUDIF' (or 'copyData') returns, we clean up after it.
DMGExtractor.java: Clean up copy loop in copyData(...).
Add support for Mac OS X sparse image files (.sparseimage).

The sparseimage file format was used before the introduction of sparse
bundles. It is a relatively simple format with a 4 KiB header containing
a block map from physical blocks to virtual blocks. When space runs out
in the header, an extension header (also 4 KiB) is written to the end of
the file before allocating the next block, appending its contents after
the extension header, and so on.

When encrypted, the sparseimage format is enclosed in a
CEncryptedEncoding wrapper (not the other way around, since that would
make it very difficult to reclaim space in the space image).