Fix containing declarations for deserialized type parameters of top-level functions
Use outer class context in ClassDeserializer
Untangle circular dependency of TypeDeserializer and context
Drop ClassKey in ClassDeserializer, simplify code
Introduce DeserializationComponents

Decouple components from the state present in contexts, get rid of duplication
of parameters in each context
Minor, rename field deserializer -> memberDeserializer
Minor, drop one of "withTypes" in favor of default arguments
Merge DeserializationGlobalContext with DeserializationComponents
Major refactoring of deserialization contexts: merge two into one
Minor, simplify MemberDeserializer.getAnnotations()
Make annotations on deserialized descriptors truly lazy
Simplify component injection in annotation/constant loaders
Rename MemberDeserializer.java -> .kt
Convert MemberDeserializer to Kotlin
Improve code after conversion, fix some warnings
Add laziness-friendly toString() to lazy type parameter
Rename deserialization context for Java to "components"

Simplify its injection to DeserializedDescriptorResolver
Drop secondary DeserializedPackageMemberScope constructor

Create package context only once
Make DeserializedType a static nested class
Extract DeserializedType to top level and convert to Kotlin