Added several variations, refactored to use a record
parameter and NamedFieldPuns/DisambiguateRecord fields so set of
variation parameters can be changed without changing signatures
of all variation functions.