Expression analysis refactorization

Refactorization of the code related to the type analysis of expressions, moving the code of each kind of expression into standalone functions and using specific AST nodes for field selector, index, substring and built-in call (special operators) expressions.