Do unaligned struct accesses by hand.

Doing this rather than copying the whole thing when we only need
a small number of fields just makes more sense.  It's only very
slightly tedious to do, and is better than using struct pointers,
too.  Ideally, we'd have a small scripting language in brilter
in which one could build up reasonably-complex match expressions,
which then would be about as optimized as this, into minimal field
accesses, length checks, etc.