per-file replacement function

This PR allows you to do the replacement differently depending on the file.

For example, to pass all relative urls in a a project to absolute ones, you need to know the location of the file.

```javascript
.pipe(replace(function (file) {
  return {
    search: url_regex,
    replacement: _.partial(replacement_function, file.path)
  };
}))
```

So if you pass a function to `replace` it runs it with the file as the argument. This function should return the arguments for the normal replacement process.

I'm not sure if this a good approach, as I don't like changing the signature of the replace function, but I can't think of another way to do this.