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.)
2 things:

1. straight up `alias getPredForEqual = equal` will work just fine.
2. Prefer non UFCS when possible, eg `"equal(a, b)"`, as that piece of code could be hijacked by `a` if the type `Range` defines an `equal` member function.