Handle abbreviated union types for code generation

Fixes #701 
It's better not to use mutation here :-) e.g.
```fsharp
            fieldNames
            |> Array.fold (fun (newNames, currentNamesWithIndices) name ->
                if name = "_" then
                    name :: newNames, currentNamesWithIndices
                else
                    let newName, newNamesWithIndices = normalizeArgName currentNamesWithIndices name
                    newName :: newNames, newNamesWithIndices
            ) ([], Map.empty)
            |> fst
            |> List.rev
            |> String.concat ", "
            |> sprintf "(%s)"
```