Extract generation logic from FunctionCodegen

Create a new class FunctionGenerationStrategy, which is used to specify exactly
how the body of a function will be generated. This is made primarily to factor
out the hard dependency on PSI in FunctionCodegen.generateMethod(). The PSI
element is now optional and is only used for debug information (as an argument
to newMethod() and endVisit()). This also helps to refactor the confusing logic
about generating default property accessors.

Assert for whether we generate code now for the declared member is now useless,
since generateMethod() will be used also for generating any possible members.

Also surround with "if ( != null)" some method call in genJetAnnotations(), as
null is possible here
Refactor copy() function generation for data classes

Use FunctionCodegen and the newly created FunctionGenerationStrategy to
generate the needed instructions. Make some methods in FunctionCodegen private
since they're not used anymore outside of the class
Refactor componentN() function generation

Adopt to the new FunctionGenerationStrategy
Minor refactoring in FunctionCodegen.genJetAnnotations()

Make method non-static, remove useless checks, etc
Get rid of FunctionCodegen.MethodInfo

generateMethodBody() is now responsible for generating the local variable
table, therefore the data class MethodInfo is not needed anymore to return
multiple values from it
Remove useless methods from codegen utils
Remove useless parameter from FunctionGenerationStrategy