refactor binary expression parsing.

Fixes #112. Chained comparison handling really muddied up `foldBinaryExpr`, unfortunately. Performance appears to have been improved by only around 5%. Still, the grammar itself is much smaller and DRY-er. Assignment and compound assignments still need to be pulled into `foldBinaryExpr`, but they should be much easier than chained comparison handling.