`std.algorithm.searching.substitute` was added

$(REF substitute, std,algorithm,searching) yields a lazy range with
all occurrences of `substs` in `r` replaced with their substitution:

---
import std.algorithm.comparison : equal;
import std.algorithm.searching : substitute;

// substitute single elements
assert("do_it".substitute('_', ' ').equal("do it"));

// substitute multiple, single elements
assert("do_it".substitute('_', ' ',
                           'd', 'g',
                           'i', 't',
                           't', 'o')
              .equal("go to"));

// substitute subranges
assert("do_it".substitute("_", " ",
                          "do", "done")
              .equal("done it"));

// substitution works for any ElementType
int[] x = [1, 2, 3];
auto y = x.substitute(1, 0.1);
assert(y.equal([0.1, 2, 3]));
static assert(is(typeof(y.front) == double));
---

If the substitution parameters are known at compile-time, the faster
template overload can be used:

---
import std.algorithm.comparison : equal;
import std.algorithm.searching : substitute;

// substitute subranges of a range
assert("apple_tree".substitute!("apple", "banana",
                                "tree", "shrub").equal("banana_shrub"));

// substitute elements in a range
assert("apple_tree".substitute!('a', 'b',
                                't', 'f').equal("bpple_free"));

// substitute values
assert('a'.substitute!('a', 'b', 't', 'f') == 'b');
---
