restoring in presence of a looong inc backup chain fails (lp:#1816130)

[Original report](https://bugs.launchpad.net/bugs/1816130) created by **Wolfgang Rohdewald (wolfgang-rohdewald)**
```
Execute the script below, it creates such a pathological backup. Of course
put something correct in for the GPG key. This is most certainly not the
shortest possible script and not the smallest number of inc backup needed.

I did that as root.


#!/bin/bash

rm -rf /etc/duply/test
mkdir /etc/duply/test

cat >/etc/duply/test/conf <<XXXENDXXX
GPG_KEY='.................'
GPG_PW='.............'
GPG_OPTS="--pinentry-mode loopback" # - needed for GPG 2.1+ _and_
SOURCE='/tmp/duply_test/source'
TARGET='file:///tmp/duply_test/target'
MAX_AGE=1M
MAX_FULL_BACKUPS=1
MAX_FULLBKP_AGE=1M
MAX_FULLS_WITH_INCRS=1
DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE "
VOLSIZE=100
DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE "
DUPL_PARAMS="$DUPL_PARAMS --asynchronous-upload "
XXXENDXXX

cd /tmp
rm -rf duply_test
mkdir duply_test
mkdir duply_test/source
mkdir duply_test/target

counter=0
while test $counter -lt 500
do
        echo counter > duply_test/source/counter
        duply test backup
        counter=$((counter + 1))
done


duply test restore restored

This will give you

  File "/usr/local/bin/duplicity", line 733, in restore
    restore_get_patched_rop_iter(col_stats)):
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
558, in Write_ROPaths
    for ropath in rop_iter:
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
521, in integrate_patch_iters
    for patch_seq in collated:
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
389, in yield_tuples
    setrorps(overflow, elems)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
378, in setrorps
    elems[i] = iter_list[i].next()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
121, in difftar2path_iter
    tarinfo_list = [tar_iter.next()]
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
339, in next
    self.set_tarfile()
  File "/usr/local/lib/python2.7/dist-packages/duplicity/patchdir.py", line
333, in set_tarfile
    self.current_fp = self.fileobj_iter.next()
  File "/usr/local/bin/duplicity", line 770, in get_fileobj_iter
    manifest.volume_info_dict[vol_num])
  File "/usr/local/bin/duplicity", line 813, in restore_get_enc_fileobj
    fileobj = tdp.filtered_open_with_delete("rb")
  File "/usr/local/lib/python2.7/dist-packages/duplicity/dup_temp.py", line
120, in filtered_open_with_delete
    fh = FileobjHooked(path.DupPath.filtered_open(self, mode))
  File "/usr/local/lib/python2.7/dist-packages/duplicity/path.py", line
779, in filtered_open
    return gpg.GPGFile(False, self, gpg_profile)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/gpg.py", line 225,
in __init__
    'logger': self.logger_fp})
  File "/usr/local/lib/python2.7/dist-packages/duplicity/gpginterface.py",
line 374, in run
    create_fhs, attach_fhs)
  File "/usr/local/lib/python2.7/dist-packages/duplicity/gpginterface.py",
line 402, in _attach_fork_exec
    pipe = os.pipe()
 OSError: [Errno 24] Too many open files
```

Story points: 6.0