Factor out almost all fs. and path. calls in the tool

This will be useful when we want to be smart with windows file paths later
Also, all of the file calls are asynchronous with fibers now, which comes with
many benefits.
I think this section (or something) could use an explanation of how paths are used.  what are the different formats?  when should you use each?  eg, if you get a path from user input (eg a command-line argument, which we don't actually have many of, i guess test-packages is the most obvious one) are you supposed to convert it to standard form somehow?

This could (perhaps should) go in the wiki Style Guide actually, a "how to deal with files in the tool" thing that among other things tells you to not use fs directly.