Stuff some memory holes

There are quite a bunch of memory holes due to padding of members to certain alignment bounds. This in particular affects 64-bit, where you need 8-byte alignments of pointers, but 32-bit is also affected where it is mostly 4-byte alignments.

I reordered the members of the worst offenders (via `-Wpadded`) so that padding can be avoided (mostly). The commit message includes some stats.

Bonus: dead store in Piece, as indicated by the clang static analyzer.