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
Why the down conversion to int? Also, the val appears to be a pointer and not actually an integer. Go since 1.3 doesn't handle pointers that are integers well. Also, Go since >=1.4 might fail to compile with a warning. If these are indeed pointers, then it might need to be looked at again as it is unsafe.

It might work, but at some point, it could fail or it could fail during runtime with little reason as to why.