add unified interface for accessing file system

**please review**
@cos as you can see the reason why you need to construct a FileUtil for this class is it needs access to the directory associated with the compiled definition. In order to be able to make this dependency more granular, it would be necessary to construct four separate FileUtil classes which each do very similar things with different directories. That seemed like a less clean solution to me than the unfortunate side effect of making this dependency slightly more centralized. Especially since you can simply choose to pass dummy values to the directories you don't want to use, if you really want to. If you can provide me with an alternate solution which is cleaner than this one, or provide me a compelling argument why the solution I just mentioned is worth the increase in code complexity, I am more than willing to change it. I just picked the API that seemed the cleanest for what I needed to be able to do, which was centralize the code which resolves, reads, and writes files in the framework.