Implement basic exception handling

  The semantics were changed from the initial implementation,
so that its behavior should not surprise C++, Java and Python
programmers.
  The initial implementation did allow reusing the same name
for different types on several catch blocks, it is no longer
allowed, to better match the remaining of the language.
  Another change from the initial implementation is that now
typed catch blocks should use vectors and classes, anything
else (numbers and null) must be catch'ed in an "auto" catch.
This allows better consistency in the language when throw'ing
a statically typed variable versus an immediate constant.
  The file check/test has several tests/examples to ensure basic
exception handling works as intended.