Rename Obj-C NativePointer to ID

Instances of this class will be used not only to store pointers, but any value
that is representable as 'id' in Objective-C. E.g., it can hold an int or a
double, but not a struct
Add ObjCObject and ObjCClass abstract classes

Instances of class ObjCObject represent objects which have a pointer to their
value in the Objective-C world. Instances of class ObjCClass represent class
objects of Objective-C classes.

These are separate notions, because ObjCObject is defined by its value (a
pointer of type ID), which is final and should be passed to it in the
constructor; whereas ObjCClass is really defined by the name of the class,
which it's a class object of. ObjCClass also has an ID value, but it's not
final, as it's initialized lazily by calling objc_getClass from runtime.

Modify JVM codegen of Objective-C classes accordingly
1