Fix alignment of some unions

Some of the unions in the FFI, represented as `type union_unnamed = c_void`, have bad alignment because C uses the alignment of the largest member. This is pretty much a hack, but it makes it work in a few more cases.