Encapsulates algorithm for laying out data structures. Note that
this ends up embedding code in various places via SizeThunks. If
the 32-bit and 64-bit ports on a given platform differ
fundamentally in their handling of struct layout then this code
will need to be updated and, most likely, two versions of the
SizeThunks maintained in various places.