Provide a method to write a tree to an archive

Add Repository.write_archive() to write a given tree to an archive. As
there are many customisation options, we only provide a method to write
to an archive which is created by the user.
Merge remote-tracking branch 'carlos/archive'