(PUP-1448) Validates the user type shell property

Adds the feature :manages_shell to the user type and asserts that
providers manipulating the shell property must have this feature.  The
useradd provider is then patched to specifically check that the shell
property is valid (file exists and is executable).  Other providers
which use shell (user/aix, user/directory_service, user/ldap, user/pw)
have the :manages_shell feature added to ensure that they continue to
function, but no additional validation is performed.

Rebased to a more recent master from Alejandro Ramirez's PR
https://github.com/puppetlabs/puppet/pull/1942
(Commits squashed)