Add Packed attribute on Header structures

Structures that are used to cast packet data into fields need to be packed
so that the compiler doesn't add any padding to these fields.

This also helps Tile-Gx to avoid unaligned loads because the compiler will insert code to
handle the possible unaligned load.

Replaces PR 903 (remastered)

The __packed__ attribute tells the compiler not to add any padding between the members, which it might do to get better alignment. In this case, not padding would be added for alignment.

It is also used by GCC as a hint that this structure could cast to unaligned data. On platforms that don't support hardware handling of unaligned loads, GCC will use loads that would not cause an unaligned access. One option is to only use byte loads and then construct larger types in the registers. Or use two large aligned loads to get all the data and then shift and mask instructions to get the unaligned data. This is faster than taking a software trap on unaligned loads to "fixup" the load.

On hardware with unaligned load support, such as x86, this will have not affect.