Refactor KotlinJvmBinaryClass, VirtualFileKotlinClass, etc.

VirtualFileKotlinClass now reads its header and name on creation. This is not
lazy enough and may be slower in some circumstances, but has the following
advantage: if anything is wrong in the header, a VirtualFileKotlinClass
instance will not be created at all, making it nearly impossible for the client
code to operate on invalid data causing all kinds of exceptions
Make KotlinBinaryClassCache thread-local
Sort out "isSpecialAnnotation" method logic

Remove duplicate method, include all needed annotations (seems that some of
them were forgotten in either of the two methods)