Ported from:
M-Labs/artiq-zynq#162
This includes new API for exception handling, some refactoring to avoid
code duplication for exception structures, and modified protocols to
send nested exceptions and avoid string allocation.
This also updates / is a prerequisite for updating smoltcp.
Rationale for changes made:
* compiler_builtins is now shipped in the rust prefix.
* rustc's libpanic_unwind no longer works for us because it
has a hard dependency on Box (and it's a horrible hack);
fortunately, we only ever needed a personality function
from it.
* panic and oom handlers are now set in a completely different
way.
* allocators are quite different (and finally stable).
* NLL caused internal compiler errors in runtime, so code using
NLL was rewritten to not rely on it and it was turned off.