replacing longjmp/setjmp with C++ exceptions in parser.
this ensures that std::vectors on the stack are cleaned up.
and that try blocks are zero-cost.

adding error guards around lex:next() and lex:lookahead() since the lexer
can throw an exception as well.
changing the way arguments are passed to macros:
 expression lists are split into seperate arguments
 unless a "quote in end" or a function returning multiple values
 forces the expression to be a single argument.