Merkle Tree is functional- though many optimizations are possible. Should be using a visitor for the "diff" calculation. Need to figure out a useful object to return for the diff