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 Yep. `int` is the magic sauce that makes it all work ;-)

But, yeah, I'm not 100% sure of the consequences (if any) of the `int` conversion in `NewVariant`, like you mentioned.

I did consider having separate `variant64` and `variant32` types, which would avoid that particular hack, but in order to keep the public API for the library clean, I feel like we'd need to do something like this:

```
type VARIANT struct {
   v32 variant32
   v64 variant64
}
```

Then `variant32` would be a separate type for 32-bit systems, and `variant64` would be the one for 64-bit. Then, `VARIANT` would be a wrapper type (we would have `Value()` and `ValueType()` methods on it), and internally in the library the code would operate on either `v32` or `v64`, based on the value of `runtime.GOARCH`.

However, having said all that, I went with the current solution because it was much less disruptive to the codebase.

So, should we try another approach, or just test this approach some more? What do you think?