fix bug in Util#symbolizehash!

The method Puppet::Util.symbolizehash! was modifying a hash
during iteration; this is (sanely, thankfully) not legal
in ruby 1.9.  This has been broken in our code for quite
some time, but we hadn't noticed because nothing was calling
this method.  A recent commit introduced code that calls it,
highlighting the bug, which is fixed by this commit.
Merge pull request #635 from cprice-puppet/bug/2.7.x/util_symbolize_hash

fix 2.7.x specs on ruby 1.9
(#7801) Modify include function to accept arrays

When an array of classes is passed to the :include function, it
currently attempts to wrap the array in another array, and then pass the
entire array through as a single argument, causing an error.  This
commit calls flatten against the array before sending it through,
following the pattern of :realize, and enabling arrays to be passed as
well as comma-separated or individual class values.
Merge pull request #528 from stschulte/ticket/2.7.x/1076

#1076: User Type: Show warning if an empty group is specified
Merge pull request #535 from eshamow/tickets/master/7801_include_should_accept_arrays

(#7801) Modify include function to accept arrays
(#12396) DRY up self.timeout

Move duplicate definitions of self.timeout into newly created module.
(#12396) dry up configtimeout usage

This commit simply addresses the comments on pull request #450.
Merge pull request #636 from cprice-puppet/refactor/master/12396-dry-up-timeout

Refactor/master/12396 dry up timeout
Merge pull request #598 from jeffweiss/ticket/master/4146_move_nagios_to_module

(#4146) Refactor Nagios to module
Fixup tests to work on CentOS 5

Several tests were failing because the depended on being able to find a
user provider. On CentOS 5 this didn't work because the provider that
should be used (the useradd provider) is not considered suitable when it
gets run as a non-privaleged user because the useradd and related
commands are not executable.

The user_spec.rb and group_spec.rb test didn't need the tests that were
failing because they were testing functionality that is already tested
by the Type base class's own tests.

The ral_spec.rb needed more mocking of the things it was using in order
to abstract it from the system on which it is running.

The resources_spec.rb got a small cleanup and was fixed by reordering
the data loading in Puppet::Type::Resources so that it doesn't load
information about a user until it needs to.
Merge pull request #637 from zaphod42/bug/master/13655-test-failures-on-centos5

(#13655) Fixup tests to work on CentOS 5
(#13659) Convert fact values to string when searching database

When querying inventory_facts we need to treat the fact value as a string,
since it's stored as text in the database. This causes an error to be raised
on postgres.
Fixup tests to work on CentOS 5

Several tests were failing because the depended on being able to find a
user provider. On CentOS 5 this didn't work because the provider that
should be used (the useradd provider) is not considered suitable when it
gets run as a non-privaleged user because the useradd and related
commands are not executable.

The user_spec.rb and group_spec.rb test didn't need the tests that were
failing because they were testing functionality that is already tested
by the Type base class's own tests.

The ral_spec.rb needed more mocking of the things it was using in order
to abstract it from the system on which it is running.

The resources_spec.rb got a small cleanup and was fixed by reordering
the data loading in Puppet::Type::Resources so that it doesn't load
information about a user until it needs to.

Conflicts:

	spec/unit/type/resources_spec.rb
Merge pull request #638 from zaphod42/bug/2.7.x/13655-test-failures-on-centos5

(#13655) test failures on centos5 on 2.7.x branch
(#13054) Add day-spanning support to schedule's range parameter

Allow schedule ranges to span the midnight boundary properly.  For
instance, for a 9 PM to 3 AM change window you can simply state
"range => '21:00 - 03:00'" instead of
"range => ['21:00 - 23:59', '00:00 - 03:00' ]"
(#13054) Fix spanning days with day-of-week in schedule

Part 2, adjust for the special adjustments needed to properly
handle the day-of-week parameter when spanning days.
Tidy up ScheduleTest includes in schedule spec tests

Per Kelsey Hightower's suggestion, move the multiple
'include ScheduleTesting' statements in the specfile to the parent
parent describe block.
[#13686] Fix directoryservices ShadowHashData code

Previously, Puppet wouldn't set a password if the ShadowHashData key was
missing from the User's plist.  This change will handle this situation,
create the key itself, and proceed with setting the password.
(#9167) Do not send email when nothing changes

Without this patch the tagmail report sends an email even when there are
no changes or resources out of sync. This has the undesired effect of
sending emails after every Puppet run.

When there are no changes or out of sync resources, tagmail logs a
notice stating the fact and skips processing logs and sending emails.

This patch includes new spec tests for the changes in behavior.
Merge remote-tracking branch 'kelseyhightower/kelseyhightower/ticket/2.7.x/9167_tagmail_report_sends_email_when_nothing_happens' into 2.7.x

* kelseyhightower/kelseyhightower/ticket/2.7.x/9167_tagmail_report_sends_email_when_nothing_happens:
  (#9167) Do not send email when nothing changes