Don't use $ in package fragment class names

Package fragment classes now are named "*Package-<filename>-<hash>" instead of
"*Package$src$<filename>$<hash>". This will help to avoid erroneous code in
intellij FileManager, which assumes that classes with dollars are always inner
classes of some other class (see AnnotationDescriptorDeserializer)
Remove hack from AnnotationDescriptorDeserializer

Now that package fragment classes are generated to "*Package-filename-hash", we
can use virtualFileFinder to find such classes by FQ name. Support
KotlinPackageFragment annotation, by which VirtualFileFinder will determine
that a class was compiled by Kotlin compiler
Make an abstraction over VirtualFileFinder

Java descriptor loader now can work with KotlinClassFinder, which finds
abstract KotlinJvmBinaryClass'es: they are based on VirtualFile in the
compiler/IDE and will be based on j.l.Class in the reflection
Make annotation deserializer not depend on VirtualFile & ASM

KotlinJvmBinaryClass now has its own visitor interfaces, which are an
abstraction over ASM visitors and the ones that will be implemented over
reflection
Change KotlinClassFileHeader loading interface

It should be able to load the header based on an abstract KotlinJvmBinaryClass,
not only the VirtualFile-based one
Delete getFqName() method from KotlinClassFileHeader

It's not related to the header. Add getClassName() method to
KotlinJvmBinaryClass, which reads the internal name of the class
ReadDataFromAnnotationVisitor doesn't depend on ASM anymore
Make compiled package fragments not show up in completion, go-to, etc.
Report ABI errors on KotlinClass, not VirtualFile