py: Add MP_OBJ_STOP_ITERATION and make good use of it.

Also make consistent use of MP_OBJ_NOT_SUPPORTED and MP_OBJ_NULL.
This helps a lot in debugging and understanding of function API.
diff --git a/py/objarray.c b/py/objarray.c
index 0011948..5c160bf 100644
--- a/py/objarray.c
+++ b/py/objarray.c
@@ -63,7 +63,7 @@
     mp_obj_t iterable = mp_getiter(initializer);
     mp_obj_t item;
     int i = 0;
-    while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
+    while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
         if (len == 0) {
             array_append(array, item);
         } else {
@@ -108,7 +108,7 @@
     switch (op) {
         case MP_UNARY_OP_BOOL: return MP_BOOL(o->len != 0);
         case MP_UNARY_OP_LEN: return MP_OBJ_NEW_SMALL_INT(o->len);
-        default: return MP_OBJ_NULL; // op not supported
+        default: return MP_OBJ_NOT_SUPPORTED;
     }
 }
 
@@ -227,7 +227,7 @@
     if (self->cur < self->array->len) {
         return mp_binary_get_val_array(self->array->typecode, self->array->items, self->cur++);
     } else {
-        return MP_OBJ_NULL;
+        return MP_OBJ_STOP_ITERATION;
     }
 }