Bug 1101337 - Make the ReplaceSubstring() XPCOM string API linear; r=froydnj

ReplaceSubstring() is an O(n*m) algorithm (n being the length of the
string and m being the number of occurrences of aTarget) because we have
to move the remainder of the string, search it again and potentially
memmove most of it again as we find more matches.  This patch rewrites
that function to make it O(n+m).

Note that we currently don't build TestStrings.cpp, so the test case in
this patch is not run automatically, but the test case has been verified
to pass separately by moving the test function into Gecko and calling it
during startup and stepping through it in the debugger.

--HG--
extra : rebase_source : b020e17c1973330b0dbbd6bf956c073cfdcb775e
Bug 1110956 - Port TestStrings.cpp to gtest and enable it; r=froydnj

--HG--
rename : xpcom/tests/TestStrings.cpp => xpcom/glue/tests/gtest/TestStrings.cpp
extra : rebase_source : 07362a75215f15211a6ef9989a555dff5a7b5a23