Introduce PackageIndexUtil#packageExists()

Use it in IDELightClassGenerationSupport and PluginDeclarationProviderFactory
Avoid redundant wrapping in SyntheticFilesFilteringScope
Introduce JetExactPackagesIndex

Use it to implement PackageIndexUtil#findFilesWithExactPackage()
Introduce SubpackagesIndexService

In memory cache which provides faster response to getSubpackages() queries
Use JetExactPackagesIndex in getAllPossiblePackageClasses
Extract containsAny utility
Implement SubpackagesIndexService#hasSubPackages()

Use it in PackageIndexUtil#packageExists()
Drop JetAllPackagesIndex
Implement modules in IDE

IDE:
Rewrite AnalyzerFacade and implementations for JS and JVM to support creating separate analyzers for each module
Introduce ModuleInfo which is an intermediate entity between configuration (tests or idea modules) and ModuleDescriptor
Implement IdeaModuleInfos which represent IDEA modules, sdks and libraries
Add (somewhat thin) test checking their behaviour
Implement getModuleInfo() - utility to obtain IdeaModuleInfo for PsiElement
Drop Project.getLazyResolveSession() - not possible to obtain resolve session for the whole project any more
Adjust JavaResolveExtension accordingly
KotlinSignature Intention/Marker - make sure that analyzed element is cls element (he's not in resolve scope otherwise)

LightClasses:
Create separate package light classes for each module
Java code can only reference light class from the first module among it's dependencies
Duplicate jvm signature is only reported on package declarations inside one module

Injectors:
Receive GlobalSearchScope as paramer for VirtualFileFinder and JavaClassFinder
which allows to narrow analyzer scope

JDR:
Introduce ModuleClassResolver resolves java classes in correct java descriptor resolver (corresponding ModuleDescriptor)
Add test checking that java classes belong to correct module

Debugger:
Provide context to analyze files created by debugger in

Converter:
Postprocessor now needs a context to analyze resulting code in

JetPsiFactory:
Add verification that files created by psi factory are not analyzed without context (that is almost never a good idea)

Other:
Use new API in various tests, utilities, run configuration producers and builtin serializers
Various "TODO: (module refactoring)" which mark the unfinished parts
Rework JetSourceFilterScope

JetSourceFilterScope doesn't have to check file type
Avoid redundant wrapping in JetSourceFilterScope (this may improve performance in case of frequent queries to indices)

We can safely use kotlinSourcesAndLibraries scope in declaration provider given we have correct scope in the first place
This allows for resolving kotlin js libraries (which are kotlin files in classes root) whithout additional hacks (i.e. IDEAConfig)
Drop IDEAConfig
Debugger, minor: Insert type arguments after replacing expression
Introduce MultiModuleHighlightingTest

Checks that analysis produces expected diagnostics when configured by real IDEA module
ResolveSessionForBodies is not ModificationTracker
JDR: drop various code that is marked as temporary

Remove additional logic for comparing files in JavaClassFinderImpl
Drop redundant check for builtins in findClassInJava(FqName)
Drop resolve cache query in LazyJavaClassMemberScope and LazyJavaPackageFragmentScope