(PUP-716) W.I.P For early review only - DO NOT MERGE

This changes the API in a new implementation in a file called file_.rb
The intent is that it should replace the implemntation in File,
or perhaps directly in a Puppet::FileSystem class.

At this point, the logic has been changed, but the majority of the tests
(that do lots of mocking) have not been changed.

DO NOT MERGE THIS