py: Change module globals from mp_map_t* to mp_obj_dict_t*.

Towards addressing issue #424.

Had a small increase to ROM usage (order 60 bytes).
diff --git a/py/objmodule.c b/py/objmodule.c
index cc5944b..783aa8a 100644
--- a/py/objmodule.c
+++ b/py/objmodule.c
@@ -19,7 +19,7 @@
 
 STATIC void module_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
     mp_obj_module_t *self = self_in;
-    mp_map_elem_t *elem = mp_map_lookup(self->globals, MP_OBJ_NEW_QSTR(attr), MP_MAP_LOOKUP);
+    mp_map_elem_t *elem = mp_map_lookup(&self->globals->map, MP_OBJ_NEW_QSTR(attr), MP_MAP_LOOKUP);
     if (elem != NULL) {
         dest[0] = elem->value;
     }
@@ -28,7 +28,7 @@
 STATIC bool module_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) {
     mp_obj_module_t *self = self_in;
     // TODO CPython allows STORE_ATTR to a module, but is this the correct implementation?
-    mp_map_lookup(self->globals, MP_OBJ_NEW_QSTR(attr), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = value;
+    mp_obj_dict_store(self->globals, MP_OBJ_NEW_QSTR(attr), value);
     return true;
 }
 
@@ -52,10 +52,10 @@
     mp_obj_module_t *o = m_new_obj(mp_obj_module_t);
     o->base.type = &mp_type_module;
     o->name = module_name;
-    o->globals = mp_map_new(1);
+    o->globals = mp_obj_new_dict(1);
 
     // store __name__ entry in the module
-    mp_map_lookup(o->globals, MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = MP_OBJ_NEW_QSTR(module_name);
+    mp_obj_dict_store(o->globals, MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(module_name));
 
     // store the new module into the slot in the global dict holding all modules
     el->value = o;
@@ -64,7 +64,7 @@
     return o;
 }
 
-mp_map_t *mp_obj_module_get_globals(mp_obj_t self_in) {
+mp_obj_dict_t *mp_obj_module_get_globals(mp_obj_t self_in) {
     assert(MP_OBJ_IS_TYPE(self_in, &mp_type_module));
     mp_obj_module_t *self = self_in;
     return self->globals;