(PUP-2282) Allow deprecation warnings to supply optional key

Puppet::Util::Logging#deprecation_warning keeps track of issued
deprecations keyed by the originating code line.  This works reasonably
well for tracing API deprecations, but can cause a problem for
notifications coming from internal calls which might happen to be called
multiple times by other code sections. It also causes problems if the
same line of code issues different deprecation warnings (say by
interpolating some parameter into the message).

This patch allows an optional key string to be submitted with the
deprecation_warning which takes precedence over using the
originating call line as the key.
(PUP-2282) Change environment setting deprecations to use keys

Ensures that deprecation warnings are issued for each deprecated
setting.
(maint) Remove unused helper method
(PUP-1114) Deprecate environment sections in puppet.conf

Environments specified in puppet.conf are deprecated ahead of removing
legacy puppet.conf environments in 4.0.  Now we issue a single
deprecation warning if a section other than main, master, agent or user
is present in puppet.conf.  Because the deprecation warnings are all
coming from the same line, Puppet::Util::Logging handles ensuring that
only one is issued.
(PUP-2282) Guard caller() lookup in deprecation_warning

Henrik pointed out that get_deprecation_offender() takes a bit of time
(0.05ms was his benchmark), and suggested this change so that we only
lookup the caller if we don't have a key or have not yet logged a
message.
Merge pull request #2541 from jpartlow/feature/master/pup-1114-deprecate-environment-conf-in-puppet-conf

Feature/master/pup 1114 deprecate environment conf in puppet conf