Diff: Implementing the diff feature

Initially cloned from my branch 'relativeLocalPath'

This PR is a superset of #32 so no need to merge #19 if this PR
is merged in.
Other suggestions and modifications are welcome.
Once reviewed, plan is to squash all commits into one.