add Repository#with_tree method

which accepts a block and yield it with the root directory of
the source tree that is extracted in a temporary directory.