Migrate SAMUtils from PSI to JavaElement

- create JavaTypeSubstitutor as a mirror for PsiSubstitutor
- copy-paste MethodSignatureUtil.areSignaturesErasureEqual() and migrate it to
  JavaTypeSubstitutor
- use a pair of method and substitutor instead of
  'MethodSignatureBackedByPsiMethod'
- add JavaClass.getDefaultType() which goes into JavaPsiFacade and creates an
  unsubstituted PsiClassType for the class
- green code

The only PSI usage left is TypeConversionUtil.erasure(), which needs to be
copied and migrated somehow
Refactor TypeVariableResolver

Delete 'context' field which was used only for debugging
Refactor JavaSignatureResolver

Now it has the only method returning Initializer, an object which can be told
to initialize resolved descriptors later, or to obtain these descriptors.
Delete useless methods, combine the remaining ones
Rename JavaSignatureResolver to TypeParameterResolver

Also rename 'parameterResolver' field to 'valueParameterResolver'
Move and rename JDR.ValueParameterDescriptors
Migrate the rest of resolvers from PSI to JavaElement

JavaMethodSignatureUtil needs to be handled specially later
hashCode, equals, toString for JavaElement
Migrate PropagationHeuristics from PSI to JavaElement

Aside from refactorings, minor changes in logic are made:
- to find out if a type of a value parameter is vararg ('ellipsis type'), we
  now check if the method is vararg and the parameter is its last parameter
  (instead of 'instanceof PsiEllipsisType')
- 'visitedSuperclasses' is now a Set: this better reflects what it's supposed
  to represent. Also result check of the 'add()' method on a List was useless
Add JavaValueParameter.isVararg()
getContainingClass() is never null for methods and fields
Refactor override resolution in JDR

Unify the code between JavaFunctionResolver and JavaPropertyResolver
Get rid of JavaBindingContext.IS_DECLARED_IN_JAVA

Create specialized Java descriptor classes instead
Get rid of SAM_ADAPTER_FUNCTION_TO_ORIGINAL

Use SAM adapters hierarchy instead
Get rid of SAM_CONSTRUCTOR_TO_INTERFACE

use SamConstructorDescriptor instead
Minor, encapsulate logic
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