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.)