Reintroduce MaterializedFrames and do not use upvalues anymore

- fixed bug where hasNonLocalReturn was used in MethodGenerationContext to denote the two distinct issues of throwing and catching, they are now handled separately
- MethodGenerationContext keeps track of whether a variable has been accessed outside of its context
- frameOnStack marker objects and their stack slots are only added when necessary
- introduced ArgumentInitializationNode that is chained before the method body to initialize the frame with the data from the arguments object
- ArgumentReadNode is only used for frame initialization
- don't use dedicated Self read nodes anymore, they are just normal variable reads, super still needs dedicated node
- super node is now in three different variants: uninitialized, local, non-local, therefore, I use an interface, to determine lexical super class
- refactored Variable to do setting of flags itself
- arguments now generally include self from the parser, during the execution, they do not.
- removed createBlock from BlockHelper, not used anymore
- blocks can now be created with and without context. in case a block doesn't need a context, we do not keep the info around to access it.
- non-local variable access can now also specialize for the type since we use materialized frames

[TODO-REPORT: discuss the reasons why to move away from the upvalues, and the benefits]

Signed-off-by: Stefan Marr <git@stefan-marr.de>