Added semantic support for strange let syntax

Changed the semantic analyzer's reorganize() to support the let syntax used in
IBTL: ((let (x int)) ...)
Semantic analyzer now makes lets look sane
Now have basic support for let/assign

It's pretty bad (all variables are just made global because I don't have time to
do it any better), but it works well enough for now.

Another solution might be to extract all let blocks as gforth words and use the
local variable syntax:

: some-let { local1, local2 } ... ;

This would run into issues with nested lets (or if we ever implement define),
but it's something to think about.