Add tree-diff

1) Add support to diff two git trees.
2) Returns a list of modified, added or removed files with old and new version. This can be utilized to implement the git diff command.
3) This needs testing. Will add tests once there is more time available.
4) Note that  this code path is not hit by any of currently exposed functionality in spark.
5) First step for #1053 

@devoncarew