Don't allow resource titles which aren't strings

It was possible to create resources whose titles weren't strings, by
using a variable containing a hash, or the result of a function which
doesn't return a string. This can cause problems resolving relationships
when the stringified version of the title differs between master and
agent.

Now we will only accept primitives, and will stringify them. That is:
string, symbol, number, boolean. Arrays or nested arrays will still be
flattened and used to create multiple resources. Any other value (for
instance: a hash) will cause a parse error.
Avoid circular requirement in FileMetadata indirection
Try again to avoid circular dependency in file indirections

Requiring the model at the end of the file seems the best approach for now.
Merge remote-tracking branch 'upstream/2.7.x' into 2.7rc
(#15264) Custom title patterns can fail cryptically.

If a type uses a composite namevar and none of the supplied title
patterns matched, #parse_title would return a nonsensical array value.
This would lead to unexpected behavior like output like:

    /usr/lib/ruby/1.8/puppet/puppet/resource.rb:235:in `to_hash': undefined method `merge' for #<Array:0x007ffba3d80d78> (NoMethodError)

If a type overrides the title_patterns method and nothing matched,
there's no possible way to recover from this. To prevent misleading
errors from being thrown, this patch raises an error if none of the
title patterns matched.
(Maint) Clarify which branches changes should be based on

Priror to this commit, CONTRIBUTING.md did not reflect our current
process in regards to where changes should be targeted. Now it is
clear on these issues so that it will be easier for community
members to target their submissions to the right location, and
prevent us from frequently having to kick back pull requests that
need to be rebased and retargeted.

<hailee@puppetlabs.com>
(Maint) Clarify that Redmine tickets are mandatory

Prior to this commit, it was unclear if it was required to have
a Redmine ticket before submitting a pull request. Now it is clear
that this is a requirement in order to help us keep track of
submissions.

Also add details about looking for already existing tickets that
are either duplicates or related. This should help with the issue
of having tons of tickets all related to one bigger issue which
cannot be tracked easily.

<hailee@puppetlabs.com>
(Maint) Be more honest about submission methods

While CONTRIBUTING.md makes it clear that GitHub is the best method
for submitting changes, it's important that we be honest about the
fact that Redmine and email patches have a tendency to get lost
(sometimes forever). Hopefuly this change will encourage people
even more to use GitHub as apposed to other methods of contributing.

<hailee@puppetlabs.com>
Fix buggy resource title tests

For some reason, these weren't actually asserting anything, and were
swallowing errors. Oops!
Merge branch 'non-string-resource-titles' of https://github.com/nicklewis/puppet into 2.7.x
Use rspec 2.11 compatible block syntax

In rspec 2.11, expectations on a block must take the form of expect...to or
lambda...should. Other combinations of those are no longer accepted. This
commit converts all mixed cases to use expect...to, as it seems to be the
preferred syntax now.
(Maint) Remove some more ambiguity

Remove the pieces of the document that say we support email and
Redmine patches, instead of just saying that we strongly
discourage these. Also change the places where we say "we recommend"
when what we really mean is "we require". Lastly, make a few small
changes that were brought up on the PR.

<hailee@puppetlabs.com>
Update CONTRIBUTING.md
(#15595) Offer better errors for certificate validation errors

The verify_callback callback gets an OpenSSL::SSL::SSLContext for each
certificate in the chain that's verified.  If the verification failed,
then SSL provides a nice error to the callback, but that error doesn't
appear in the subsequent OpenSSL::SSL::SSLError.

This patch uses a technique similar to that used for peer_certs to
collect those errors and then add them to the Puppet::Error message
later.

Remove the guess at the error (time sync).
updates as requested

* combine conditionals in verify_callback
* change formatting of verify errors
use error_message instead of error
(#15595) Clear up tests around ssl errors

The tests around the SSL errors had some unclear parts. They made it
look like the verify method was going to get an OpenSSL::SSL::SSLContext
where in reality it is provided an OpenSSL::X509::StoreContext. There
was also duplication between two tests that has been refactored out.
(#15595) Improve message on SSL errors

The wording on the error message added the text "verify error" in front
of the actual message. That text made for a somewhat confusing message.
This commit removes that text and so the reported error will simply be
"<message> for <subject>"
Replace "the short version" with outline 

Previously, the short version/checklist at the beginning did not line
up with the rest of the document, and was presenting information in 
a confusing order. Now it reflects the way the information is organized
in the larger document, and serves as a good checklist for going through
the process. 
Merge pull request #960 from hkenney/maint/2.7.x/fix_up_contributing_md

(Maint) Fix up CONTRIBUTING.md