Go improvements

Some Go fixes from @techee and myself, including:

* add a few test cases (some from from https://gobyexample.com/, CC-BY 3.0)
* drop use of `setjmp()`/`longjmp()`
* fix handling of `<` operator.
* only use valid identifiers
* better semicolon handling
* fix parsing of single-line `var` and `const`
* avoid getting fooled unhandled top-level constructs.