Add dataset for in zone data, clean up merger semantics

Add a new dataset class for the in zone data CSV file and reference
it in the main scraper program.

Update the merger semantics a bit to make it easier to understand
what's going on.  Use 'dataset' instead of 'slug' to represent
the identifier for the datasets that are being merged.  Use
id to instead of key to reference the record ids.

I still need to implement a mechanism for merging data, like the
in zone data, where the rows are sparse.  That is, there might not
be a record for every row in the CDC dataset, but where we can
notify the merger when we've gone through all the rows of data.

Add vows as a development dependency as I want to test the merger
behavior.

Addresses #3685
Move DataMerger to separate module

The code was getting a little long, and the functionality is
different and independent from the datasets, so it makes sense to
move this to a separate module.

Addresses #3685
Add support to merger for optional datasets

The merger was originally designed with the idea that there would be
a corresponding record in each of the merged datasets.  However,
this won't be the case for the "in-zone" dataset.  This commit
adds support for specifying optional datasets for the merger and
then calling a method to tell it when all rows have been processed.

Addresses #3685
Wire up inzone data to scraper.

Addresses #3685
Fix typo.

s/InSiteVisitZoneZone/InSiteVisitZone/

Addresses #3685
Only flush completed data

Addresses #3685