Made HexFile effectively immutable; the file contents are passed to the constructor as a ReadableShortList (the existing ShortList interface minus the mutators). Technically it is still possible to mutate the SparseShortList passed in, but for now it's good enough as long as the programmer behaves.
HexFileMetadata is all of HexFile except the file data itself. It serves to separate what does and doesn't depend on file data.
The blank-checking machinery is now all static methods requiring only metadata and a port.
DumbShortList is a simpler (if less efficient) implementation of the same interface as SparseShortList; in particular, its implementation is a much more direct reflection of the interface. Rather than being implemented as a sparse array, DumbShortList is essentially a resizable int array with a value of -1 anywhere it hasn't been set. Its extents() method does an `indexOf`-style scan to determine where the sequence starts and stops being defined.
SparseShortList.java has been removed.
IntRange now has a toString().
Common now has methods that convert between shorts and unsigned 16-bit values (as ints).