py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR.

This allows the mp_obj_t type to be configured to something other than a
pointer-sized primitive type.

This patch also includes additional changes to allow the code to compile
when sizeof(mp_uint_t) != sizeof(void*), such as using size_t instead of
mp_uint_t, and various casts.
diff --git a/py/objenumerate.c b/py/objenumerate.c
index 9cdd4fd..3629c1a 100644
--- a/py/objenumerate.c
+++ b/py/objenumerate.c
@@ -53,7 +53,7 @@
 
     // create enumerate object
     mp_obj_enumerate_t *o = m_new_obj(mp_obj_enumerate_t);
-    o->base.type = type_in;
+    o->base.type = MP_OBJ_TO_PTR(type_in);
     o->iter = mp_getiter(vals[0].u_obj);
     o->cur = vals[1].u_int;
 #else
@@ -64,7 +64,7 @@
     o->cur = n_args > 1 ? mp_obj_get_int(args[1]) : 0;
 #endif
 
-    return o;
+    return MP_OBJ_FROM_PTR(o);
 }
 
 const mp_obj_type_t mp_type_enumerate = {
@@ -77,7 +77,7 @@
 
 STATIC mp_obj_t enumerate_iternext(mp_obj_t self_in) {
     assert(MP_OBJ_IS_TYPE(self_in, &mp_type_enumerate));
-    mp_obj_enumerate_t *self = self_in;
+    mp_obj_enumerate_t *self = MP_OBJ_TO_PTR(self_in);
     mp_obj_t next = mp_iternext(self->iter);
     if (next == MP_OBJ_STOP_ITERATION) {
         return MP_OBJ_STOP_ITERATION;