objlist: Add support for statically allocated lists.

Similar to similar support for lists.
diff --git a/py/obj.h b/py/obj.h
index 356e722..6e57966 100644
--- a/py/obj.h
+++ b/py/obj.h
@@ -454,6 +454,8 @@
 mp_obj_t mp_obj_tuple_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args);
 
 // list
+struct _mp_obj_list_t;
+void mp_obj_list_init(struct _mp_obj_list_t *o, uint n);
 mp_obj_t mp_obj_list_append(mp_obj_t self_in, mp_obj_t arg);
 void mp_obj_list_get(mp_obj_t self_in, uint *len, mp_obj_t **items);
 void mp_obj_list_set_len(mp_obj_t self_in, uint len);
diff --git a/py/objlist.c b/py/objlist.c
index 531e4b8..538cba7 100644
--- a/py/objlist.c
+++ b/py/objlist.c
@@ -8,13 +8,7 @@
 #include "obj.h"
 #include "runtime0.h"
 #include "runtime.h"
-
-typedef struct _mp_obj_list_t {
-    mp_obj_base_t base;
-    machine_uint_t alloc;
-    machine_uint_t len;
-    mp_obj_t *items;
-} mp_obj_list_t;
+#include "objlist.h"
 
 STATIC mp_obj_t mp_obj_new_list_iterator(mp_obj_list_t *list, int cur);
 STATIC mp_obj_list_t *list_new(uint n);
@@ -363,12 +357,16 @@
     .locals_dict = (mp_obj_t)&list_locals_dict,
 };
 
-STATIC mp_obj_list_t *list_new(uint n) {
-    mp_obj_list_t *o = m_new_obj(mp_obj_list_t);
+void mp_obj_list_init(mp_obj_list_t *o, uint n) {
     o->base.type = &mp_type_list;
     o->alloc = n < LIST_MIN_ALLOC ? LIST_MIN_ALLOC : n;
     o->len = n;
     o->items = m_new(mp_obj_t, o->alloc);
+}
+
+STATIC mp_obj_list_t *list_new(uint n) {
+    mp_obj_list_t *o = m_new_obj(mp_obj_list_t);
+    mp_obj_list_init(o, n);
     return o;
 }
 
diff --git a/py/objlist.h b/py/objlist.h
new file mode 100644
index 0000000..cc8d7de
--- /dev/null
+++ b/py/objlist.h
@@ -0,0 +1,6 @@
+typedef struct _mp_obj_list_t {
+    mp_obj_base_t base;
+    machine_uint_t alloc;
+    machine_uint_t len;
+    mp_obj_t *items;
+} mp_obj_list_t;