Achieve non-generic generators in most interactive workflows

GeneratorFunction required explicit generics annotation like `let g<'a> = generator<'a> parameter`.
This change successfully removes such noise with introducing discriminated unions to the GeneratorFunction,
and type safty might be enhanced in some dgree.
Unfortunately, it also has some bad side effects:
some onerous wrapping by discriminated union's constructor if you make a GeneratorFunction without `random` computation expression,
and a little performance down.