Make JetSimpleNameExpression abstract, create subclasses for each element type

It's not a good practice to have one PSI class to correspond to several element types
Make JetReferenceExpression an interface
Rewrite JetSimpleNameExpression and inheritors to Kotlin
Make JetSimpleNameExpression a trait
Make JetSimpleNameExpression#getReceiverExpression extension function and move it to util class
Stubs for JetImportList
Stubs for JetImportDirective
JetTypeParameterListOwnerStub#getTypeParameterList by stub
JetFile#getImportList() and JetImportList#getImports() by stubs
Stubs for JetModifierList
JetDeclaration#getModifierList() by stub

JetClass#getPrimaryConstructorModifierList() by stub
Stubs for JetTypeConstraintList
JetTypeParameterListOwnerStub#getTypeConstraintList() by stub
Minor: make JetTypeElement an interface
Stubs: reduce the amount of boilerplate code

Extract a common type for placeholder stub elements
Introduce helper method to get stub or psi children as list

Add ArrayFactory to JetStubElement
Remove redundant array factories
Stubs for JetNullableType
Stubs for JetTypeReference
Stubs for JetUserType
JetNamedFunction#getReceiverTypeRef and getReturnTypeRef by stub