Support VARIANT on 32-bit and 64-bit architectures

* Changed definition of VARIANT struct so it matches
the 32-bit and 64-bit versions of the Windows VARIANT type
depending on GOARCH (i.e. use `int` instead of `int64` so that
the size is correct for both `386` and `amd64`)
* Added NewVariant constructor to simplify VARIANT creation
and handle special-cases when running on 32-bit related
to struct layout differences on 32-bit vs. 64-bit
@mjibson Didn't occur to me actually. We would be able to remove the `runtime` import by doing that instead, and you could argue `unsafe.Sizeof` is more explicit/clearer in this case.

I agree I think the functionality would be the same either way, so I think it comes down to which way reads better.