Move 8bit<->7bit logic to a separate class
Move JavaProtoBufUtil utilities to where they're used

Serialization goes to backend: it's not needed in runtime, at least in the
state in which it is now (dependent on ASM).

Deserialization goes to AnnotationDescriptorDeserializer. Inline some methods,
remove unneeded abstractions.

This removes dependency of serialization.java on ASM
Remove dependency of annotation deserializer on ASM Type
Minor refactorings in KotlinClassFileHeader
Remove KotlinClassFileHeader.HeaderType.NONE

Use null instead
Make KotlinClassFileHeader immutable, make its inner class nested
KotlinClassFileHeader is now nullable everywhere

'null' means there's no header. This makes all of KotlinClassFileHeader's
fields non-null
Simplify logic in KotlinClassFileHeader

When processing annotations, we should ensure not only that we have no more
than one KotlinClass/KotlinPackage annotation, but any supported header type at
all. Also instead of throwing an exception it's safer to just log the error
Move KotlinClassFileHeader to header/ package
Refactor KotlinClassFileHeader

Split into two subclasses: KotlinClass/KotlinPackage-annotated classes and
JetClass/JetPackage-annotated classes
Move nested class to top-level
Write KotlinPackageFragment annotation to package$src classes
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
Delete unused method from VirtualFileFinder
Move Kotlin descriptor loading to kotlin/ package
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
Move ClassSerializationUtil to 'compiler-tests' module

It's not used in 'serialization'
Regenerate ProtoBuf files
Serialize FQ names of Kotlin classes

This helps to avoid a nasty hack with loading inner Kotlin classes in JDR,
which makes it a bit easier to 'lazify' JDR, since now the container of a
Kotlin class is no longer required to be resolved eagerly before resolution of
the class itself