Implement code generation for list operators

The current matching scheme requires that all match rules for a given list
operator match the same number of parameters.

The biggest limitation is that it can't match expressions like:

    push @foo : Array[Int], $a : Int, $b : Int, $c : Int;

which is not an issue at this point and can be handled later by annotating the
grammar with a default expression type for term arguments (at the moment it's
always Expr).
Implement ternary operator