Refactor alternative method signatures

Create ExternalSignatureResolver which can resolve propagated and alternative
signatures, use it in JavaFunctionResolver and JavaConstructorResolver.

Move JavaValueParameterResolver.ValueParameters to SignaturesPropagationData,
since elsewhere it always had receiverType = null
Use ExternalSignatureResolver to resolve field signatures
Create PropagatedMethodSignature nested class

Should be an abstraction over SignaturesPropagationData
Extract interface out of ExternalSignatureResolver
Create JavaResolverCache

An abstraction over BindingTrace which will be used in JDR
Remove BindingTrace from Java function and property resolvers

Pass a throwing trace to OverrideResolver since in the case of Java member
resolution there's no JetDeclaration for any member and hence
CANNOT_INFER_VISIBILITY diagnostic can not be reported anywhere
Extract enum method utilities from DescriptorResolver

Create overloaded versions which accept JetType as a parameter to use them in
JDR where there's no deferred types
Add source descriptors lookup to JavaResolverCache

Use JavaResolverCache instead of BindingTrace in JavaClassResolver and
JavaNamespaceResolver
Get rid of trace in JavaClassResolver and JavaNamespaceResolver

Add ErrorReporterProvider which creates an ErrorReporter which reports ABI
errors to the trace
Get rid of trace in JavaSupertypeResolver

The only place where it was used was INCOMPLETE_HIERARCHY report, which didn't
work at all (added TODO about it)
Create JavaSignatureFormatter, a wrapper over PsiFormatUtil
Extract signature checking logic into an interface

Combine JavaMethodSignatureUtil and RawTypesCheck utility classes into a new
PsiBasedMethodSignatureChecker
Extract JavaMemberResolver out of JDR

JavaDescriptorResolver had a lot of methods which were used only in Java*Scope.
This is not good because JDR is a facade class that everyone uses from outside
and it's not required to find methods/fields/...
This logic is now extracted to JavaMemberResolver, which is passed to a scope
and is used to resolve its members ('members' here means classes, namespaces,
functions, properties, constructors)