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)
Regenerate compiled testData

Add sources and instructions to tests which had compiled jars in the testData.
PLEASE ALWAYS ADD SOURCES AND INSTRUCTIONS for tests with jars.

Delete runtime, stdlib and their sources from these jars -- PLEASE DO NOT PUT
kotlin-runtime.jar INTO TEST DATA JARS: every such jar is around 1Mb, it spoils
the repository
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