Make VM stack grow upwards, and so no reversed args arrays.

Change state layout in VM so the stack starts at state[0] and grows
upwards.  Locals are at the top end of the state and number downwards.
This cleans up a lot of the interface connecting the VM to C: now all
functions that take an array of Micro Python objects are in order (ie no
longer in reverse).

Also clean up C API with keyword arguments (call_n and call_n_kw
replaced with single call method that takes keyword arguments).  And now
make_new takes keyword arguments.

emitnative.c has not yet been changed to comply with the new order of
stack layout.
diff --git a/py/objexcept.c b/py/objexcept.c
index 67e6d63..1d30758 100644
--- a/py/objexcept.c
+++ b/py/objexcept.c
@@ -7,6 +7,7 @@
 #include "nlr.h"
 #include "misc.h"
 #include "mpconfig.h"
+#include "mpqstr.h"
 #include "obj.h"
 #include "objtuple.h"
 
@@ -43,20 +44,19 @@
     }
 }
 
-// args in reversed order
-static mp_obj_t exception_call(mp_obj_t self_in, int n_args, const mp_obj_t *args) {
+static mp_obj_t exception_call(mp_obj_t self_in, uint n_args, uint n_kw, const mp_obj_t *args) {
     mp_obj_exception_t *base = self_in;
-    mp_obj_exception_t *o = m_new_obj_var(mp_obj_exception_t, mp_obj_t*, n_args);
+
+    if (n_kw != 0) {
+        nlr_jump(mp_obj_new_exception_msg_1_arg(MP_QSTR_TypeError, "%s does not take keyword arguments", qstr_str(base->id)));
+    }
+
+    mp_obj_exception_t *o = m_new_obj_var(mp_obj_exception_t, mp_obj_t, n_args);
     o->base.type = &exception_type;
     o->id = base->id;
     o->msg = 0;
     o->args.len = n_args;
-
-    // TODO: factor out as reusable copy_reversed()
-    int j = 0;
-    for (int i = n_args - 1; i >= 0; i--) {
-        o->args.items[i] = args[j++];
-    }
+    memcpy(o->args.items, args, n_args * sizeof(mp_obj_t));
     return o;
 }
 
@@ -64,7 +64,7 @@
     { &mp_const_type },
     "exception",
     .print = exception_print,
-    .call_n = exception_call,
+    .call = exception_call,
 };
 
 mp_obj_t mp_obj_new_exception(qstr id) {