Add NativeValue, refactor native Obj-C support

Change "ID..." to the more generic "NativeValue...". NativeValue represents an
object that may be passed to a native method.

Move argument type-casting code from codegen to native. This should also be
useful for mapping closure return types, which happens in native
Refactor native Obj-C support

ObjCObject now has a direct pointer to its native mirror
Get rid of ID class in Obj-C native support
Suppress ld warning about compact unwind

"could not create compact unwind for _ffi_call_unix64: does not use RBP or RSP
based frame"
Inherit Obj-C classes from ObjCObject

Also don't generate code for fake overrides which are present in the superclass
Obj-C metaclasses inheritance

Class objects of Obj-C classes inherit from the root class of the class of
which they're in. Because of this, a fake root class 'NSObject' was added to
the most of the resolve tests not to duplicate dat (otherwise class members
of the root class would appear twice, as declarations in the class and as fake
overrides in its class object).

There's no such thing as a class object of a protocol or a category, so don't
resolve them anymore (but still resolve metaclasses for protocols/categories,
since the latter may contain class methods)
1