more file io refactoring

Removes more references to static working directory.

@osa1 @radumereuta Please review
I can think of two reasons:

- This way we can make `Sdf2Table` testable in unit tests by providing it a mocked `ProcessBuilder` object that doesn't really spawn new processes. (I guess this is one of the classic arguments for factory classes)
- `Sdf2Table` can't create new `ProcessBuilder` because it doesn't know some of the things it needs to know to create a `ProcessBuilder`. (like shell process environment and working dir -- in theory `Sdf2Table` can know all those but for abstraction purposes doing it in one place for the whole framework is better for usual reasons)