Remove duplicates from implicit receiver hierarchy while building tasks
Rename

receiverForVariableAsFunctionSecondCall -> explicitExtensionReceiver
receiverFromVariable -> calleeExpressionAsThisObject
Refactoring: do not store reference expression in resolution task

Sometimes there is no reference for the call (like '{ ... } ()').
A fake reference can be created, but the case when an error is reported on it can't be easily supported.

There were two usages of this reference: tracing and receiver for invoke.
Tracing strategy is created beforehand. Receiver for invoke uses the callee expression (from variable call), not the reference.
Report resolve call errors on JetExpression, not on JetReferenceExpression
Refactoring: extracted isInvokeCallOnVariable
Resolve invoke on any kind of expressions, not only on simple name expressions
Added 'call' reference to ResolvedCall
Supported invoke on expressions on js backend
Refactoring: made explicitExtensionReceiverForInvoke final
Added CallableDescriptorCollectors
to use it instead List<CallableDescriptorCollector>
Improved error reporting for invoke on expression
Refactoring: removed method ResolvedCall.isSafeCall

used JetPsiUtil.isSafeCall(resolvedCall.getCall()) instead
Removed ExpressionAsFunctionDescriptor
Added asserts about unfinished state
to ResolutionTaskHolder
++Added CallableDescriptorCollectors
++Added 'call' reference to ResolvedCall