Maint: Remove unused variable in user spec

If rspec already gives us the described class why not using it.
Maint: Add a real provider class to user spec

Add a real provider class we can use in the tests.
Maint: Use real objects in user spec

Remove all references to the mock resource object
Maint: Remove unused mock objects in user spec

Also remove the modification of the PATH environment variable because we
will always have our :simple provider which does rely on any commands in
/sbin.
(#1076) Show warning if an empty group is specified

If the user passes an empty group to the user type, puppet will execute
an invalid `usermod` command.

e.g. if groups of user 'foo' is currently 'bar' and we do

    user { 'foo':
      groups     => '',
      membership => minimum # this is the default
    }

puppet will build a should value of ',bar' (old group + the new group '') and
will pass '-G ,bar' to the usermod command (which will then fail).

To really specifiy 'no group' the group property does allow an empty
array so we should fail if we find an empty string as a group.
(#13296) 'unless' as a parameter inside a resource causes syntax error

Add test to validate that unless gets parsed properly if a parameter
Add case to grammar to PARAMETER for UNLESS => EXPRESSION
Regenerate parser from grammar
(#4146) Refactor Nagios to module

Move the nagios types, grammar, and naginator to an external module
(#13296) allow any keyword as resource param name

Add list of keywords to grammar.ra
Regenerate parser from grammar
Add parser tests for each keyword as a parameter
Add unless to keyword list in lexer tests

Prior to #13296, the resources did not allow parameter names to be
language keywords.  With this commit, resources can use any of the
keywords as a parameter name.

For example this is again legal:
exec { '/bin/echo foo':
  unless => '/usr/bin/false',
}
Merge pull request #589 from jeffweiss/ticket/master/13296_unless_in_exec_causes_syntax_error

(#13296) 'unless' as a parameter inside a resource causes syntax error
Merge branch '2.7.x'

Conflicts:
	lib/puppet/daemon.rb
	spec/unit/daemon_spec.rb
	spec/unit/parser/ast/leaf_spec.rb
	spec/unit/provider/package/dpkg_spec.rb
	spec/unit/util/settings_spec.rb
Merge pull request #601 from cprice-puppet/master

Merge 2.7.x
(#13439) refactor spec_helper for spec compatibility between 2.7 and
master
remove literal tabs from defaults.rb

It was brought to my attention that there were a lot of literal
tab characters in defaults.rb.  Cleaned them up.
Merge pull request #605 from cprice-puppet/cleanup/master/remove-tabs-from-defaults

remove literal tabs from defaults.rb
Merge pull request #603 from cprice-puppet/bug/master/13439-spec-compatibility

(#13439) refactor spec_helper for spec compatibility between 2.7 and master
Monkey patch FileUtils.mv in Ruby 1.8.5

The FileUtils.mv method in Ruby 1.8.5 can't mv directories across
devices.  File.rename causes "Invalid cross-device link" errors, which
is rescued, but in Ruby 1.8.5 it tries to recover with a copy and
unlink, but the unlink causes the error "Is a directory".  In newer
Rubies remove_entry is used, so the implementation in this patch is
what's used in Ruby 1.8.7 and Ruby 1.9

This was an issue in installing modules using `puppet module install`
since the module is extracted to a temporary directory and then moved to
the modulepath.
(#13367) Patch SemVer to permit ranges including pre-release components.
Make core changes needed for the puppet module tool

This includes changes to portions of the Puppet code base that have some
use by other parts of Puppet than the module tool, but are necessary for
the module tool work.
Merge branch '2.7.x'

This commit looks like a no-op, but it resolves a conflict for
a commit in 2.7.x that had to do with spec_helper compatibility
w/stdlib and grayskull (#13439)

Conflicts:
	lib/puppet/util/settings.rb
Add a feature to detect RDoc 1.0.1 being present on the system.

In practice the Puppet manifest documentation generator only works with the
version of RDoc that ships with Ruby 1.8 - version 1.0.1, which was identical
in 1.8.5 ad 1.8.7.

Previously, because it was a core library, we just assumed it was present; now
we need to test conditionally for it being there *and* the correct version.

That allows us to have a nicer failure mode as we work through rdoc use, to
clearly indicate to users which version we have.  As we support newer
versions, additional features can better identify what is available.

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>