A golang port of Variants

Differences between this and the node implementation:
+ Forced values are omitted.
+ Named registries are omitted.