(PUP-2626) Accept module paths in Puppet::Parser::Function.file()

Summary
---

This modifies the <code>file()</code> function to accept module paths (like the <code>template()</code> function) as well as fully qualified paths.

Example
---
with directory structure:
<pre>
/etc/puppet/modules/example
├── files
│   └──file.ext
├── manifests
│   └──init.pp
└── templates
    └──template.erb
</pre>

When the module path for files can be used instead of the absolute path:

<code>file('example/file.ext')</code> returns the same as <code>file('/etc/puppet/modules/example/files/file.ext')</code>.

This is supposed to be like how template does module paths, where: 

<code>template('example/template.erb')</code> returns the same as <code>template('/etc/puppet/modules/example/templates/template.erb')</code>

Why
---

This would make it possible for modules that use the <code>file()</code> function to be more portable, instead of being tied to a specific puppet server configuration.
while this happens to work now, it is sensitive to Ruby operator precedence where not, and, or have the lowest precedence of all operators. Would like to see this written as `if !path.nil? && Puppet::FileSystem.exist?(path)` to avoid being bitten by any future changes. (In general always use !, && and || since they have sane precedence).