5b67cf67eb
The basic principle behind this change is that no context object should store components. Components should be injected instead, and contexts only carry parameters around. Particular changes: - resolveCallWithGivenName() and resolveBinaryCall() moved to CallResolver - ForLoopConventionsChecker introduced to confine checking conventions for Iterator and Iterable - ExpressionTypingComponents introduced to deliver necessary components to ExpressionTypingVisitor's - Some static methods became non-static to get access to injected components - ExpressionTypingUtils and ControlStructureTypingUtils became components (got state injected) to avoid passing parameters around