Handle missing puppet.conf

When `#with_puppet_running_on` is executed, it attempts to back up
puppet.conf and replace it for the duration for the test. The old
behavior of the code would always try to back up the file regardless of
the existence of the file, and would fail when the copy failed. This
commit ensures that the puppet.conf file is only backed up when present,
and the temporary puppet.conf is returned to the original state
when the method returns.

This supersedes GH-60.