(PUP-2867) Support ~ in file paths, allows to deploy to ~<user> directories

  Note: validation will let ~ pass, but munging will fail if the user
    does not exist since it calls File#expand_path
So this raises a number of cases we have to worry about:

  * Path is `~/path` and `ENV['HOME']` is unset, which will cause Puppet to crash when attempting to expand the path.
  * Path is `~user/path` but `user` does not exist at the time of the File resource application

If one of these conditions is satisfied, how should we fail?

In addition, this isn't entirely truthful `~user/path` can be expanded to an absolute path, but it is not in and of itself an absolute path. If this is specifically for the `file` resource then I think that the changes need to be localized to the `file` resource, instead of affecting anything that could invoke `absolute_path?`.