{Matches,DoesNotMatch} support the ESCAPE clause
Merge pull request #318 from tamird/match-escape

{Matches,DoesNotMatch} support the ESCAPE clause
`Expresssions` => `Expressions` [ci skip]
Merge pull request #324 from vipulnsward/cte

`Expresssions` => `Expressions`
Reuse `maybe_visit` method

This commit simply removes duplicated code by reusing the
existing `maybe_visit` method.
Merge pull request #325 from claudiob/reuse-maybe-visit-method

Reuse `maybe_visit` method
Completes 08e6491 in reusing `maybe_visit`

:sweat: I don't know why the tests did not fail, but to keep
the same syntax as before, `collector =` is required.

Maybe `visit` changes `collector` in-place, so the result is the
same, but since I'm not sure about the side effects, I think this
PR is needed to. Sorry! :sweat:
Merge pull request #326 from claudiob/reuse-maybe-visit

Completes 08e6491 in reusing `maybe_visit`
Binary nodes should not generate the same hash as nodes of other classes
`#not_in` with a range should respect proper precedence

Currently, doing

```ruby
relation[:id].not_eq(4).and(relation[:id].not_in(1..3))
```

will generate

```sql
"id" != 4 AND "id" < 1 OR "id" > 3
```

Which would incorrectly include records with an id of 4, as the OR
statement has higher precidence than the AND statement. The `or`
method on `Node` properly groups the statement in parenthesis.
Improve test coverage for `#in` and `#not_in`

These methods are going to go through some heavy refactoring, and moving
logic around. This adds missing tests for each of the branches on the
predicate.
Merge pull request #330 from sgrif/sg-binary-node-hash-equality

Binary nodes should not generate the same hash as nodes of other classes
Merge pull request #332 from sgrif/sg-include-in-test-coverage

Improve test coverage for `#in` and `#not_in`
Merge pull request #331 from sgrif/sg-in-should-not-break-queries

`#not_in` with a range should respect proper precedence
💣
Refactor `#in` and `#not_in`

These methods duplicate a lot of logic from the other predications. We
can just use those methods directly, and only build nodes with the same
name in our method directly. We've already had one bug that came from
building nodes directly, rather than using the proper predicate.
Deprecate passing ranges to `#in` and `#not_in`

The goal of these methods should be to generate in nodes, not handle
every possible permutation of more than one value. The `#between` and
`#not_between` methods have been extracted, which better represent the
semantics of handling ranges in SQL.
Merge pull request #333 from sgrif/sg-separate-range-method

Deprecate passing ranges to `#in` and `#not_in`
Dry up building quoted nodes in predication

Given that we are going to remove casting from Arel in the near future,
having a single place nodes in predications will help.
Revert "Merge pull request #300 from jpcody/master"

This reverts commit 36836fa5e7c084c0dce2818577e6fd0cf815f786, reversing
changes made to 53bc8426648cc93695525e8f12102cd416b2d772.