Add preprocess docs, fix garbage in/out bug

Add documentation on how to use the preprocess option.

Fix a small bug when a user returns back a non-string value.
```js
var contents = opts.preprocess.call(file, file.contents.toString());
index.contents = contents.toString();
```
@sukima it might be a bit more semantic to use `toString()` here rather then concatenation.