Stop mixing context and components in the type checker

A few minor changes 

\+ 

ExpressionTypingContext used to carry around an instance of ExpressionTypingServices, which is a component and thus should be only injected and not passed around.

This imposes a problem when refactoring TopDownAnalyzer: when started for a local class it should have an outer ExpressionTypingContext, but it would carry a different instance of ExpressionTypingServices, which may result in discrepancies of all sorts. Now this problem is eliminated.