Add support for storing args during an exception raised by an irq.

The user code should call micropython.alloc_emergency_exception_buf(size)
where size is the size of the buffer used to print the argument
passed to the exception.

With the test code from #732, and a call to micropython.alloc_emergency_exception_buf(100) in boot.py, the following error is now printed:
```python
>>> import heartbeat_irq
Uncaught exception in Timer(4) interrupt handler
Traceback (most recent call last):
  File "0://heartbeat_irq.py", line 14, in heartbeat_cb
NameError: name 'led' is not defined
```

Currently the exception handler assumes intimate knowledge of the tuple, str, and list classes. If desired, we could create functions for each of these classes which initialize the object into a previously allocated buffer.
The mp_ prefix should be used on everything (especially exported names) to create a consistent interface.  Module are name, eg, mp_module_micropython.  Modules generally don't export their C functions, only their module object, so there's no real need for them to have a separate header file (see eg builtins.h).