Add predicate deduction to std.algorithm.equal

This allows comparing types whose elements don't define `opEquals`, but can themselves be compared with `equal`. This is especially useful for comparing ranges-of-ranges.

As an example application, consider the unit test of `chunkBy`:
http://wiki.dlang.org/Component_programming_with_ranges#chunkBy
It checks for equality of `byX/Y` and `expected1/2` manually with a `foreach` loop. With this extension, `byX.equals(expected1)` can be used. (Although the function already allows specifying the predicate manually as in `byX.equal!equal(expected1)`, this is not obvious and evidently hasn't occurred to the Wiki article's author.)
Because that's what the template constraint checks for. I wanted to make sure there are no edge cases where `r1.front == r2.front` compiles, but the corresponding `binaryFun` doesn't.