(PUP-1210) Error if missing password info on OSX 10.8

When managing passwords on OSX versions >= 10.8 the password needs to
hashed using PBKDF2. PBKDF2 uses a salt and a number of iterations,
which the puppet user type supports (specifically for this), and are
critical parts of the password storage. Many users seem to have been
tripped up by this change (since no other systems that are managed do
this, including older versions of OSX) and created user accounts that
were unable to be logged into.

This causes the provider to fail on >= 10.8 if any one or two of the
salt, iterations, or password are missing. This should provide better
guidance and error messages for users in this situation.
(PUP-1210) Provide clear guidance on OSX passwords

This tries to make clear what properties need to be used when managing
passwords on OS X >= 10.8, since it is very different from other
providers.
(PUP-1944) Fix issue with manifest being a directory when initializing

The issue was that Puppet manages files and directories mentioned in
settings (to set the correct owner and mode). The :manifest setting
was a :file settings type and this did not work well when the :manifest
was a reference to an existing directory ("cannot change a directory to
a file") and the puppet master refused to start.

This commit changes this by introducing a new settings type;
:file_or_directory that manages the path as a directory if it exists or
if the path ends with slash (/ or \).
(PUP-2017) Change TupleType size to mean total number of entries

The TupleType was implemented so that the size constraint only
applied to the last type. This was difficult to work with. It is
far better if the size constraint works the same way as for an
array, only that the types can be different per index. Thus a size
constraint of 2,3 for the tuple types t1, t2, t3 means that t1, and t2
are required and t3 is optional. If the size range is > the number of
types, the last type repeats.

Conflicts:
	lib/puppet/pops/types/types.rb
Merge pull request #2459 from hlindberg/pup-2017_tuple-type-size-constraint

(PUP-2017) Change TupleType size to mean total number of entries
(PUP-1596) Expand all paths when creating directory environments

When reading EnvironmentConf settings, relative paths were prepended
with the directory environment path. This commit ensures that we also
expand the paths properly so that they are absolute on both Windows and
Posix platforms.
Merge pull request #2460 from jpartlow/feature/master/pup-1596-expand-paths-for-env-on-windows

(PUP-1596) Expand all paths when creating environments
Merge pull request #2457 from zaphod42/issue/stable/pup-1210-invalid-passwords-set-on-osx

(PUP-1210) Error if missing password info on OSX 10.8
Merge pull request #2461 from hlindberg/pup-1944_management-of-manfests-setting

(PUP-1944) Fix issue with manifest being a directory when initializing
Merge remote-tracking branch 'upstream/stable'

* upstream/stable:
  (PUP-2017) Change TupleType size to mean total number of entries
  (PUP-1944) Fix issue with manifest being a directory when initializing
  (PUP-1210) Provide clear guidance on OSX passwords
  (PUP-1210) Error if missing password info on OSX 10.8
Merge branch 'master' of https://github.com/puppetlabs/puppet