Minimise generic classes to avoid bloat
Minimise generic classes to avoid bloat

Pulled out most of the code from generic classes into helper functions
in order to try to shrink the code bloat which was occurring in the
native images.

fsharp/fsharp,Heather/fsharp,dsyme/fsharp,forki/FSharp.Compiler.Service,syeerzy/visualfsharp,dsyme/fsharp,brettfo/visualfsharp,rojepp/FSharp.Compiler.Service,brettfo/visualfsharp,forki/FSharp.Compiler.Service,sergey-tihon/FSharp.Compiler.Service,dsyme/fsharp,alfonsogarciacaro/FSharp.Compiler.Service,brettfo/visualfsharp,Jand42/FSharp.Compiler.Service,syeerzy/visualfsharp,alfonsogarciacaro/FSharp.Compiler.Service,Heather/fsharp,dsyme/fsharp,matthid/FSharp.Compiler.Service,syeerzy/visualfsharp,dsyme/fsharp,brettfo/visualfsharp,dsyme/fsharp,cloudRoutine/FSharp.Compiler.Service,Jand42/FSharp.Compiler.Service,brettfo/visualfsharp,cloudRoutine/FSharp.Compiler.Service,Jand42/FSharp.Compiler.Service,syeerzy/visualfsharp,0x53A/FSharp.Compiler.Service,dsyme/FSharp.Compiler.Service,forki/FSharp.Compiler.Service,fsharp/fsharp,vasily-kirichenko/FSharp.Compiler.Service,syeerzy/visualfsharp,cloudRoutine/FSharp.Compiler.Service,0x53A/FSharp.Compiler.Service,rojepp/FSharp.Compiler.Service,ncave/FSharp.Compiler.Service,dsyme/FSharp.Compiler.Service,dsyme/fsharp,vasily-kirichenko/FSharp.Compiler.Service,syeerzy/visualfsharp,dsyme/FSharp.Compiler.Service,alfonsogarciacaro/FSharp.Compiler.Service,BillHally/FSharp.Compiler.Service,ncave/FSharp.Compiler.Service,brettfo/visualfsharp,rojepp/FSharp.Compiler.Service,vasily-kirichenko/FSharp.Compiler.Service,matthid/FSharp.Compiler.Service,fsharp/fsharp,sergey-tihon/FSharp.Compiler.Service,0x53A/FSharp.Compiler.Service,BillHally/FSharp.Compiler.Service,ncave/FSharp.Compiler.Service,matthid/FSharp.Compiler.Service,sergey-tihon/FSharp.Compiler.Service