Allow ports to define statically builtin functions.

Convert unix open() to such.
diff --git a/unix/file.c b/unix/file.c
index 0d11de6..21dd764 100644
--- a/unix/file.c
+++ b/unix/file.c
@@ -136,8 +136,6 @@
 MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_open_obj, 1, 2, mp_builtin_open);
 
 void file_init() {
-    rt_store_name(MP_QSTR_open, (mp_obj_t)&mp_builtin_open_obj);
-
     mp_obj_t m_sys = mp_obj_new_module(MP_QSTR_sys);
     rt_store_attr(m_sys, MP_QSTR_stdin, fdfile_new(STDIN_FILENO));
     rt_store_attr(m_sys, MP_QSTR_stdout, fdfile_new(STDOUT_FILENO));
diff --git a/unix/main.c b/unix/main.c
index 192a0e6..716c7b1 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -29,7 +29,6 @@
 // Stack top at the start of program
 void *stack_top;
 
-extern const mp_obj_fun_native_t mp_builtin_open_obj;
 void file_init();
 void microsocket_init();
 void time_init();
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index dc92970..5b2503f 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -36,3 +36,8 @@
 typedef double machine_float_t;
 
 machine_float_t machine_sqrt(machine_float_t x);
+
+struct _mp_obj_fun_native_t;
+extern const struct _mp_obj_fun_native_t mp_builtin_open_obj;
+#define MICROPY_EXTRA_BUILTINS \
+    { MP_QSTR_open, (mp_obj_t)&mp_builtin_open_obj },