reimplemented gsub(copied a lot from rubinius) and wrote tests for our ...

...implementation. gsub now supports blocks and hashes as replacement arguments, not only strings.