Compatibility of Objective-C interface and id types

Currently mergeTypes has the following code/comment:

The issue with the implementation before was that it wasn't
symmetrical, i.e. for some interfaces a and b, compatible(a,b) and
compatible(b,a) returned different results. This is no good; it runs
completely counter to the spirit of C type compatibility and the rules
for every other type.

The first approach I tried was just making ObjC interfaces
symmetrically compatible, like your proposal; however, if I recall
correctly, this led to some testsuite failures because of missing
warnings about implicit down-casting on assignment. If you think
that's better solved in a different way, go ahead and make whatever
changes you think are appropriate; I know very little about ObjC.

It's possible that it would be appropriate to have both symmetric and
asymmetric type merging modes; they would be identical for pure C
types, but could be different for ObjC interfaces. I haven't thought
this through at all, though; I just came up with it a moment ago.

-Eli