Usages of expressionTypingServices from ExpressionTypingContext are replaced with injection

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
Do not inject BodiesResolveContext into BodyResolver
Do not inject TopDownAnalysisContext into TopDownAnalyzer
Do not inject TopDownAnalysisContext into ScriptBodyResolver
Do not inject TopDownAnalysisContext into DeclarationResolver
Do not inject TopDownAnalysisContext into ImportsResolver
Do not inject TopDownAnalysisContext into ScriptHeaderResolver
Do not inject TopDownAnalysisContext into OverloadResolver
Do not inject TopDownAnalysisContext into OverrideResolver
Do not inject TopDownAnalysisContext into TypeHierarchyResolver
Do not create TopDownAnalysisContext in injectors
Do not inject TopDownAnalysisParameters into TopDownAnalyzer
BodiesResolveContext exposes TopDownAnalysisParameters
Do not inject TopDownAnalysisParameters into BodyResolver
Do not inject TopDownAnalysisParameters into ControlFlowAnalyzer
Do not inject TopDownAnalysisParameters into OverrideResolver
Do not inject TopDownAnalysisParameters into ScriptHeaderResolver
Do not pass TopDownAnalysisParameters to injectors
Unused parameter removed
Unneeded wrapping removed