Add PathReplacer

* Convert reading files to using a stream
* Add a `PathReplacer`