(#16568) Warn when TypeCollection skips missing objects

Commit 242692e optimized the `TypeCollection` by having it track missing
objects and then skip searching for those objects during subsequent
compilations. The problem is that this behavior was not logged which led many
users to wonder why classes and definitions would repeatedly come up as missing
until the puppet master was restarted (ref [#16568][16568]).

[16568]: https://projects.puppetlabs.com/issues/16568
(#16568) Try to load missing types by default

This patch adds a new setting `:ignoremissingtypes` that controls the
optimization introduced in 242692e. This setting defaults to `false` as the
behavior of this optimization is likely to confuse those who don't need it.
Merge branch 'Sharpie-16568-make-typecollection-optimization-optional' into stable

* Sharpie-16568-make-typecollection-optimization-optional:
  (#16568) Try to load missing types by default
  (#16568) Warn when TypeCollection skips missing objects

closes #1616
Merge branch 'stable'

* stable:
  (#16568) Try to load missing types by default
  (#16568) Warn when TypeCollection skips missing objects
(#20421) Use systemd as default service on arch

Per https://www.archlinux.org/news/end-of-initscripts-support/ Arch
Linux has migrated to systemd and as of January 2013 has dropped support
for sysv style init scripts. GH-1468 updated the systemctl binary
location which made the systemd service provider functional on Arch, but
since there was no clear default between init and systemd, init won out
which effectively broke systemd init scripts.

This commit sets systemd as the default for Arch Linux, and makes the
sysvinit scripts available as a fallback option. Since the init provider
is still functional and can be delegated to if there is no systemd
service for a given system service.

Squashed into a single commit and commit message update by Adrien Thebo
<adrien@puppetlabs.com>
Merge branch 'pull-1615' into stable
Merge branch 'stable'
(maint) Make sqlite3 use an in-memory DB (try 2)

The previous attempt to enable in-memory sqlite3 database testing for
the spec tests in 58e1c23 is insufficient because the
Puppet[:dblocation] setting is a type of FileSetting which munges values
using File.expand_path.  This is a problem because the path expansion
caused the database to be written to the filesystem rather than memory,
as intended.

This patch addresses the problem by adding a special case for all file
settings.  The munge operation is a no-op if the special value of
':memory:' is passed.
Merge branch 'stable'

* stable:
  (maint) Make sqlite3 use an in-memory DB (try 2)
(#2244) Remove nil results in static compiler as well

Fix this bug in static compiler as well.
Merge branch 'dalen-2244_static_compiler' into stable

* dalen-2244_static_compiler:
  (#2244) Remove nil results in static compiler as well

closes #1610
Merge branch 'stable'

* stable:
  (#2244) Remove nil results in static compiler as well
(#14615) Don't run dangerous init scripts on Debian

The init service provider has an exclude list of init scripts which
shouldn't be executed because they don't actually have a status
subcommand. However, this list was missing a couple of scripts on Debian
which also shouldn't be run: rcS and module-init-tools.

This also adds an acceptance test verifying that `puppet resource
service` doesn't change the state of the system. It does this by running
it twice and making sure the output is the same. In certain cases, this
may actually fail to identify a problem (if the init script which causes
trouble runs first, for instance), so we also verify that a known
service (ssh) is unaffected by running the command.
Merge branch 'nicklewis-rcS-is-a-jerk' into stable

* nicklewis-rcS-is-a-jerk:
  (#14615) Don't run dangerous init scripts on Debian

closes #1617
Merge branch 'stable'

* stable:
  (#14615) Don't run dangerous init scripts on Debian
Merge branch 'master' of https://github.com/puppetlabs/puppet