Big-endian: Byteswap only the field contents when writing progs.dat
The previous code swapped not just the fields' contents themselves, but
also field positions within several of the structs, resulting in a
non-working progs.dat when compiled on big endian (ppc in my case).
Swapping on a field-by-field basis now.
Also:
* Addresses weird swap size requests (30+ bytes in one case)
* Take a guess at the right way to log a weird swap request before dying
* Fix swap array length scaling
* Rename the main swap function to reflect its native->little-endian
purpose. Figued that was okay because progs.dat is required to be
always little-endian...
* Add a non-array version of the swap function for convenience