(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
### `~/path` and `ENV['HOME']` unset

When `ENV['HOME']` is unset in Puppet 3.6.2, Puppet refuses to start:

```
$ HOME= puppet apply user_file.pp 
Error: Could not initialize global default settings: non-absolute home
```

I don't know if that's a known bug, but it certainly won't get to the absolute path check in this case.

### `~user/path` and `user` does not exist on client

The current code will have `munge` fail with a clear error message:

```
$ puppet apply user_home.pp 
Notice: Compiled catalog for obadiah.bouyguesbox.fr in environment production in 0.12 seconds
Error: Parameter path failed on File[~foo/bas/test.txt]: Munging failed for value "~foo/bas/test.txt" in class path: user foo doesn't exist at /home/raphink/bas/puppet/user_home.pp:3
Wrapped exception:
Munging failed for value "~foo/bas/test.txt" in class path: user foo doesn't exist
```

### Modifying `absolute_path?`

I've thought a bit about that too and wondered what an absolute path actually is. If an absolute path is a path that refers to an absolute location, i.e. a unique file, regardless of the `$CWD`, then `~<user>/path` qualifies for this, and even `~/path`, as it only depends on `$HOME`. These two paths refer to a unique file in the file system and do not depend on `$CWD`. The file might not exist, but then `absolute_path?` is not a garantee that the file exists, only that the syntax refers to an absolute location, which it does in both cases here.