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.
15547 : use a clean env for builtin check

solaris has /bin/cd as a command to ensure posix compatibility. So
we need to avoid using '/bin' in path if we want to ensure that we
are looking at shell builtin cd.
15547 : valid locales as sentinel and check

Using spurious values for LC_ALL and LANG values in solaris causes
some commands to barf. Since we are only checking for overrides, we
can aswell use a valid locale.
15547 : Add home environemnt to pkgutil

pkgutil expects home to be set when run as non-user. Add $HOME when
invoking pkgutil
(#15547) remove the spaec between method and ()
12465 : update the service to use its own pid at /var/run/puppet.pid
12465 : update the spec to make sure upgrade happens seamlessly.
(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>
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.
Merge branch 'fixpid' of https://github.com/vrthra/puppet into 3.x
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 3.x
Merge branch '2.7.x' into 3.x

* 2.7.x:
  Use rspec 2.11 compatible block syntax

Conflicts:
	spec/integration/faces/ca_spec.rb
	spec/integration/network/server/mongrel_spec.rb
	spec/unit/application_spec.rb
	spec/unit/face/help_spec.rb
	spec/unit/network/handler/fileserver_spec.rb
	spec/unit/parser/functions/create_resources_spec.rb
	spec/unit/provider/nameservice/directoryservice_spec.rb
	spec/unit/type/file_spec.rb
	spec/unit/type_spec.rb
Revert "Merge branch 'non-string-resource-titles' of https://github.com/nicklewis/puppet into 3.x"

This reverts commit 7fe3bbb75abb576b7ae9b129ea2c4dd924912ff0, reversing
changes made to fe64cdeaa210534e64c37caa47a86df070da9b26.

Accidentally merged this into 3.x when it was mean to go into 2.7.x.