ir ast cleanup and extension

Fairly extensive cleanup and extension of the ast.

Highlights include:

* Operators -=, *=, /= and ? :  now work.
* Simplification of user syntax by implicitly casting strings and numbers to symbol.