py/viper: Allow casting of Python integers to viper pointers.

This allows you to pass a number (being an address) to a viper function
that expects a pointer, and also allows casting of integers to pointers
within viper functions.

This was actually the original behaviour, but it regressed due to native
type identifiers being promoted to 4 bits in width.
diff --git a/py/nativeglue.c b/py/nativeglue.c
index e27d69e..bc2f4ff 100644
--- a/py/nativeglue.c
+++ b/py/nativeglue.c
@@ -50,10 +50,14 @@
         case MP_NATIVE_TYPE_BOOL:
         case MP_NATIVE_TYPE_INT:
         case MP_NATIVE_TYPE_UINT: return mp_obj_get_int_truncated(obj);
-        default: { // a pointer
+        default: { // cast obj to a pointer
             mp_buffer_info_t bufinfo;
-            mp_get_buffer_raise(obj, &bufinfo, MP_BUFFER_RW);
-            return (mp_uint_t)bufinfo.buf;
+            if (mp_get_buffer(obj, &bufinfo, MP_BUFFER_RW)) {
+                return (mp_uint_t)bufinfo.buf;
+            } else {
+                // assume obj is an integer that represents an address
+                return mp_obj_get_int_truncated(obj);
+            }
         }
     }
 }