(#3581) Stop forking around: Add fork helper method
Without this patch we are forking all over the place. All this forking
around is problematic when it comes to things like ActiveRecord and
database connections. It turns out that forking has a nasty side effect
of aggressively closing database connections and spewing errors all over
the place.
This patch introduces a new Puppet::Util#safe_posix_fork method that
does forking the right way (closing file descriptors, and resetting
stdin, stdout, and stderr). Tagmail, Puppet kick, and
Puppet::Util#execute_posix have been updated to make use of this new
functionality.
In the future, Puppet::Util#safe_posix_fork should be used in-place of
direct calls to Kernel#fork.
This patch includes related spec tests.