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.
In this case the function is referenced from both objexcept.c and from modmicropython.c, wihch is why I put the function prototype in the header file.

So do you want to call the function:
mp_micropython_alloc_emergency_exception_buf
or
mp_alloc_emergency_exception_buf?
or
mp_module_micropython_alloc_emergency_exception_buf?

The last one seems to be most consistent with the names of the other symbols exported from mod* files in the py directory.

I'm happy to use whatever you'd like.