Update: add yoda exception for range tests (fixes #1561)

This is a possible implementation of #1561 to see whether it's worth pursuing. This is the most restrictive version I could imagine being reasonable, on the assumption that we can drop restrictions if it's too complex. In order to qualify for the exception, a BinaryExpression's parent must be:

- A `LogicalExpression`...
- ...containing two `BinaryExpression`s...
- ...whose tests are both `<` or `<=`...
- ...either an `&&` "between" test...
    - ...with literals describing a range on the exterior...
    - ...and the same expression on the interior...
- ...or an `||` "outside" test...
    - ...with literals describing a range on the interior...
    - ...and the same expression on the exterior...
- ...that is wrapped in parens.

For example:

- `var a = 0 < b && b < 1 ? "between" : "outside";` would fail, but `var a = (0 < b && b < 1) ? "between" : "outside";` would pass.
- "Outside" tests such as `if (x < 0 || 1 <= x) {}` would pass.
- `if (1 <= x && x < 0) {}` makes no sense, so it would fail, but `if (0 <= x && x < 1) {}` would pass.
- `if (a < 1 && 1 < x && x < 10) {}` would fail, but wrapping it in parens `if (a < 1 && (a < x && x < 10)) {}` would let it pass.
- "Backwards" tests `if (6 > x && x > 5) {}` are not included in this exception.

*Edit: Add "outside" exception.*
This really needs to be broken up some how.