Support Obj-C methods returning unknown classes

Objective-C method which is declared to return NSString *, can instead return
an object of some class which is unexposed at compile time, e.g.
__NSCFConstantString. When constructing a Java object from such a return value,
we now go up the hierarchy to find the first class which is available at
compile time (there should be at least one) and create an instance of it.
Minor, fix layout of categories in Obj-C indexer

This way it'll be a lot easier for descriptor resolver
Resolve Obj-C categories into traits
Support categories in Obj-C+Java codegen

Fix a bug in argument indices, not counting the type size again (sigh)
Retain Obj-C objects

If an object is returned by some Objective-C method, we need to tell
Objective-C Runtime that we now have an additional reference to it (in the
mirroring object in JVM). To prevent memory leaks, we should also release the
object somewhere, e.g. generate the corresponding code in the 'finalize()'
method of every mirroring JVM class
Calculate Obj-C class pointer eagerly

Objective-C class objects now don't have a ObjCClass superclass and it's now
made an interface. This is done for the following reasons:
1) remove ObjCClass dependency on Native
2) class objects actually do have a non-trivial superclass, which is a root
   metaclass (this is not implemented yet)
Obj-C built-ins prototype

Add default import path for built-in classes, resolve these classes via
JavaDescriptorResolver. This is a temporary hack, built-ins probably need to be
implemented in Kotlin later
Support Pointer<T> in ObjCTypeResolver

"void *" maps to Pointer<*>, and any other pointer maps to the Pointer of the
corresponding mapped pointee type
Drop indexing Obj-C ivars

They don't seem to be needed at all
Support Pointer<Char> in Obj-C+Java
1