added list indexing and expressions as a separate branch.

Contains the list indexing as a separate pull request without the not/negate/until change.

Old syntax, and the syntax used in commit #22 is supported backward compatibly:  You can do this:
* ARR#0
* ARR#1
* ARR#2

and this:
* ARR#i
* ARR#i#j

But new syntax with square brackets allows any arbitrary complex expression as the index, not just numbers or variables:
* ARR[0]
* ARR[i]
* ARR[ i ] [j]
* ARR [ mod(X,10) ] [ y - 3 ]

It was not possible to support any arbitrary complex expression as the index without changing the syntax to one in which an open/close pairing (like [..]) was used to demark the index, for reasons explained elsewhere in comments to #38.