py/objtype: Add a fallback lookup in 'object' for native types.
py/objtype: Add a fallback lookup in 'object' for native types.

mp_obj_class_lookup is refactored that if an attribute is not found, and
there is a native base class, then to look up in in "object" type. This
is needed e.g. to be able to look up __init__ as inherited from "object".

The original idea was also for __new__ to be handled this way, but it
doesn't work immediately due to __new__ peculiarities (it being
staticmethod).

Overall, this is one possible approach to the problem, and likely not
the most ideal one. Other approaches:

1. Make subclassable native types to have explicit __new__ and __init__
methods. Then no special fallback is needed, and overall handling is
simplified. (But note that beyond __new__/__init__ there're a lot of
other special methods, adding them all as explicit Python-level ones
will be too expensive, so "runtime wrapper" approach is still needed).

2. Use fallback approach, but don't fallback to look up in object
(which requires changing its __new__/__init__ semantics comparing to
Python), but use dedicated wrappers.

All in all, the whole lookup process needs to be refactored, to use
__mro__.

Change-Id: Ifb6059beccce6c6b24c2918fcd6d099c6560d579
Signed-off-by: Paul Sokolovsky <9dc5061f178bb11813e14f1ed02ba27eaf21fa5d@users.sourceforge.net>

pfalcon/micropython,pfalcon/micropython,pfalcon/micropython,pfalcon/micropython,pfalcon/micropython