Add named constructors to And and Or expressions
Add sub-expression type to math expression
Extract object that performs left-associative parsing

This clarifies the operator rules by highlighting what happens, not
how.
Remove duplication from `X else Y else ...` parsing rules
Remove explicit type