fix for: U4-2635 Replace [...] method only replaces first ocurrence of oldString

`source` string is now looped over until all occurrences are replaced. Each successive check starts from just after the last replacement for efficiency and to avoid infinite loops when oldString and newString compare equal. Added tests too.

http://issues.umbraco.org/issue/U4-2635