a round of CareLink fixes (suspend/resumes, basals, settings)

@kentquirk @jh-bate This is ready for review, including tests. I'm going to start commenting in line.
A bunch of the changes in the simulator are just to get suspends working at all. The data model and jellyfish require that `deviceMeta` events (especially resumes) have a `previous`. These weren't being set before, so jellyfish wasn't creating any proper `deviceMeta` events, only a bajillion with `"annotations": [{ "code": "status/incomplete-tuple" }]`.