Preserve os.getcwd() state before yield in drecurse.py generators

Preserve current working directory state in recursive_dirlist() and
_recursive_dirlist()

drecurse depends upon the value of os.getcwd() while iterating, but
previously did not preserve it's state before yielding, meaning external
code touching os.chdir could break iteration. This commit adds state
preservation using an OsFile() object, which prevents this type of
breakage.

drecurse will still leak the value of os.getcwd() to external code, so
any behavior depending on this is unaffected.

Signed-off-by: Will Rouesnel <w.rouesnel@gmail.com>