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
@jacobsantos I agree. With this fix, I was trying to keep everything backwards-compatible, as much as I could given the nature of the issue.

With the current fix, we could probably reduce the risk of the `int` conversion causing problems by just putting it into an `else` block. That way, Go will only run it if `GOARCH` is `amd64`, which  I would think would be less risky, since as mentioned, it wouldn't truncate the value in that case.