(PUP-3723) Add new loginclass parameter to user type
(PUP-3787) Add leading '0' for four-digit octal notation of file modes.
(PUP-933) Update CONTRIBUTING.md to talk about acceptable kinds of changes

Assist contributors with determining if proposed changes are best contributed
to the puppet core or as a module.
Merge pull request #3437 from rnelson0/contributing-doc

(PUP-933) Update CONTRIBUTING.md to talk about acceptable kinds of changes
Merge pull request #3384 from jasperla/loginclass

(PUP-3723) Add new loginclass parameter to user type
Merge pull request #3436 from rnelson0/file_mode

(PUP-3787) Add leading '0' for four-digit octal notation of file modes.
(maint) Use rspec 3 and rspec-its gem
(maint) Rename be_true/be_false to be_truthy/be_falsey for rspec 3
(maint) Add rspec-collection_matchers for matchers pulled out of rspec 3
(maint) Convert specs to RSpec 3.1.7 syntax with Transpec

This conversion is done by Transpec 3.0.5 with the following command:
    transpec

* 8169 conversions
    from: obj.should
      to: expect(obj).to

* 5570 conversions
    from: == expected
      to: eq(expected)

* 499 conversions
    from: obj.should_not
      to: expect(obj).not_to

* 235 conversions
    from: lambda { }.should
      to: expect { }.to

* 133 conversions
    from: =~ /pattern/
      to: match(/pattern/)

* 96 conversions
    from: it { should ... }
      to: it { is_expected.to ... }

* 66 conversions
    from: lambda { }.should_not
      to: expect { }.not_to

* 61 conversions
    from: =~ [1, 2]
      to: match_array([1, 2])

* 53 conversions
    from: proc { }.should
      to: expect { }.to

* 46 conversions
    from: stub('something')
      to: double('something')

* 19 conversions
    from: mock('something')
      to: double('something')

* 15 conversions
    from: proc { }.should_not
      to: expect { }.not_to

* 14 conversions
    from: failure_message_for_should { }
      to: failure_message { }

* 12 conversions
    from: it { should_not ... }
      to: it { is_expected.not_to ... }

* 11 conversions
    from: < expected
      to: be < expected

* 11 conversions
    from: > expected
      to: be > expected

* 5 conversions
    from: failure_message_for_should_not { }
      to: failure_message_when_negated { }

* 4 conversions
    from: obj.unstub(:message)
      to: allow(obj).to receive(:message).and_call_original

* 2 conversions
    from: >= expected
      to: be >= expected

* 1 conversion
    from: <= expected
      to: be <= expected

* 1 conversion
    from: === expected
      to: be === expected

* 1 conversion
    from: Proc.new { }.should_not
      to: expect { }.not_to

* 1 conversion
    from: def helper_method example; end
      to: def helper_method RSpec.current_example; end

* 1 conversion
    from: expect(collection).to have_at_least(n).items
      to: expect(collection.size).to be >= n

For more details: https://github.com/yujinakayama/transpec#supported-conversions
(maint) Remove a meaningless spec test (there is no defined_feature? method)
(maint) Add supports_block_expectation shortcut to matchers that do
(maint) Make some methods public where specs were relying on them

Previously these methods were made private, but spec tests were still
using them as if they were public. Apparently, rspec 2 didn't enforce
access methods but rspec 3 does, so for the time being simply mark
the methods public (with a note to the user that they shouldn't be
treated as part of a public API).

As a possible future improvement the code could be rewritten to not
test using private methods, but that looks like a fair bit of surgery
for not that much gain at this time. Something to consider as/when
this code is refactored going forward.
(maint) Remove must alias for rspec 3

Previously, puppet had a monkey patch to rspec to alias 'must'
to 'should'. This was done to workaround the use of a 'should'
method in Puppet::Type conflicting with rspec's should.

With rspec 3 syntax, we can replace those with expect(...).to
syntax and do away with the monkey patch. (An earlier commit
programatically replaced all the actual 'should's in the spec
tests using transpec, but it missed the 'must's.)

This commit:
* remove the monkey patch to rspec
* uses the expect(...).to syntax everywhere there was a .must
* replaces use of the == method with eq
* includes some other minor rspec-3 changes to files that needed
  the above treatment
(maint) Update matchers to use rspec 3's failure_message protocol
(maint) Convert some 'should's to 'expect's that weren't previously found

These were a couple outlier uses of 'should' not caught either by
transpec, or by the purge of 'must' for different reasons:
* provider_spec.rb had some metaprogrammed use of should
* semver_spec.rb had a should in a bare 'describe' block
(maint) Remove spec test for previously removed code

These spec tests were added in 3c441212, but the (monkey-patched)
code they tested was removed in 179ee762 when we dropped support
for ruby < 1.8.7.

Kill it with fire.
(maint) Fix a use of 'subject' in an after hook
(maint) Replace 'double' with 'stub' for rspec 3
(maint) Change 'describe' blocks to 'context' blocks

Previously there were spec tests with a 'describe' inside a 'describe',
which was fine and unambiguous as long as the inner 'describe' blocks
didn't make use of 'described_class'. However, rspec 3 consistently
treats the inner 'describe' as the source for the 'described_class',
which can lead to nonsense assertions with nested describes.

So this commit changes inner 'describe's to 'context's where needed
to make 'described_class' apply properly. Further, for internal consistency
within a file, all describes of a given depth or deeper that were
intended to be contexts were renamed as well.