Async tests refactor

## Improvements
- adds tests for a fixture of each conform type (download/file presence & num rows in out.csv)
- changes unzip behavior to avoid saving sources' bespoke file paths
- adds csv parsing library to csv.js functions (no more .split(','), but csv-parse's error handling options could be better)
- asyncifies some elements of index.js to support tests
- moves console.log messages to more easily-controllable debug()
- more dependence on `source` objects derived from JSON, less use of filename.replace('.json','') for IDs
- removal of stream copying from temp to perm files when fs.rename() is adequate

## Notes/Cautions
- `test/download.js` is arguably superfluous since `test/conform.js` relies on its behavior (it does test for unzip completeness in a way that `conform.js` doesn't)
- no tests for cached data; I don't have the callbacks set up to emit data about whether caching is used or not right now since there's no functional need for it (but it does work from the CLI)
- "valid" CSV row counts are sui generis -- if there's reason to doubt them, lmk, but they seem in the right ballpark
- unzip behavior turned out arguably overengineered -- if it gives you problems let me know & we can simplify
- both unzipped and zipped files are presently retained. caching checks for existence of unzipped only. unsure what the right call is here.