Fix some very questionable API design issues

I can't imagine why anyone would want to specify arbitrary input/output paths
when the whole point of the module is minimal manual setup...

Also rewrote the code to remove another needless IO::Path object per iteration,
and tidied it up as much as I could. I was planning to do something fancy with
concurrency but it didn't work out.