smbg should only include CalBGForPH

According to @jebeck's excellent work:
  https://github.com/tidepool-org/data-model/wiki/Carelink-Files#wiki-blood-glucose-data
Add missing tests for other types of bolus

There was no test for dual wave or square wave bolus.
This adds a fixture to test them.
stub out initial desalinate method

Simply pass through all parsed smbg, cbg, and carb records.
Those match our standard data model.
add desalinate entry point to top level import
Add some vaccuous pass tests

Now, results with a value of 0 are valid, eg, it's valid to eat 0 carbs.
Include some other tests to cover the built in validator.  As it turns
out most of the record-specific validators preclude any invalid
elements, so the utils test ensures in the worst case that in the
general case no elements remain which have no valid and invalid date.

Side effect is that test coverage is now 100% of the
covered/instrumented sources.
Add helper utility for parsing the Raw-Value field
iterate bolus details

Ensure that parsed bolus records include more of the interesting
details from the raw data.
* remove duplicate fixture
* include duration
* include programmed vs delivered amount

This breaks validation using the tidepool's normal form, due to the
programmed field.
test for bolus output in MM form
enable validation for normal bolus records
test all records against data model

Includes recent work on parsers to include medtronic extensions.
Add wizard type
Include updated data model to validate bolus records
Add joinKey and subType to bolus records

Per discussion: https://github.com/tidepool-org/data-model/pull/12/files#r10009973
Make commandline actually output json

Allows this tool to be piped to json, eg like this:

  870  grep -C 5 Unabs bewest-carelink.csv  | mmcsv parse - \
         | json -a -C deviceTime type subType joinKey | less
joinKey: naive experiment to predict matching key

Per the joinKey discussions
allow tests to pass while iterating on data model
Include basal-rate-change, wizard, and bolus in desalinate

Release agreed types into result stream.
Actually include basal in desalinate stream
hash the joinKey

Actually hash the joinKey.
respond to feedback from pull request

Justify commented code with other comments to explain what's going on
and few hints on how to get info.

Also move hashing function to it's own dedicated function in utils,
and update tests to expect a hashed value.