Plug a GPGME::Ctx leak with gpgme gem >= 2.0.0

The latest version of gpgme on rubyforge is 2.0.2 and it supports
passing a block to GPGME::Ctx.new.  I believe that up to now, this
provider has leaked Ctx instances because Ctx#release was never
called.  That's now ensured when Ctx.new is given a block.
Support `user' and `gnupghome' parameters

Ther `user' parameter can be set to manage the keys of any existing
user on the system.  It defaults to the user running puppet.

If `gnupghome` is set, the environment variable GNUPGHOME will be
set during all calls to GnuPG and override the default directory
~/.gnupg.

Implementation detail:

We use Process.fork and SUIDManager.change_privileges instead of
SUIDManager.asuser since GnuPG will abort when it detects that it is
running with effective UID != real UID.