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.