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 This is what makes the whole thing work. The problem is that the `VARIANT` type as defined by Windows is actually a different size depending on whether the calling process is 32-bit or 64-bit.

On 32-bit systems, `sizeof(VARIANT)` is 16 bytes, but on 64-bit systems, it is 24 bytes.

Originally, I tried to get around this by having separate `VARIANT32` and VARIANT64` types, but that got way to complicated and messy.

Instead, this is more a "hack" that takes advantage of the fact that `int` in Go is 32 bits wide on when compiling for 32-bit platforms, and 64 bits wide when compiling for 64-bit platforms.

This way, the size of the `VARIANT` struct ends up being the correct size based on the target architecture.

Also, in this case, it is only a down-conversion if `GOARCH` is set to a 32-bit architecture; so, I agree that might cause problems on that platform, but on a 64-bit architecture, it is a cast and not a down-conversion per se (the size of each type is the same).