Parsing more stuff

Reworked the parsing rules so that commands joined by logical operators ('&&'
and '||') are now structured as a linked list of commands.

the commandList rule will match one or more commands separated by control
operators ('&' and ';') and return them as an array.

This also includes initial support for 'while' and 'until' loops, other loops
and if/elif/else blocks should be pretty easy to add now as well.