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/sequence.c b/py/sequence.c
index 2781534..6f715ff 100644
--- a/py/sequence.c
+++ b/py/sequence.c
@@ -217,7 +217,7 @@
 // Special-case of index() which searches for mp_obj_t
 mp_obj_t mp_seq_index_obj(const mp_obj_t *items, mp_uint_t len, mp_uint_t n_args, const mp_obj_t *args) {
     mp_obj_type_t *type = mp_obj_get_type(args[0]);
-    mp_obj_t *value = args[1];
+    mp_obj_t value = args[1];
     uint start = 0;
     uint stop = len;