[WIP] more testing of successful ezupload (no bug) re #2

* test coverage of "success" branch of ezupload.
* it's gross that `ezupload` promises different things depending on what
happens...
  - data clear
  - the death of the addon
  - res

SHOULD IT CLEAR?  SHOULD IT KILL?
conclusive tests that config survives restarts  (really fix #27)

* new make target "test-shell" for bash related tests.
* shows that a study config is maintained across a true firefox restart
  (we could do even further along this path, if we need to).
* Mechanism.  start and kill fx with a study.  Start it again,
  and show second time study has same personid and starttime (which it
  will revive out of simple-storage.micropilot.<<studyname>>
gitignore coverstats, built xpis
include a copy of indexed-db.js fix #36

indcluded copy is forked slightly to handle sdk path issues.
conclusive tests that config survives restarts  (really fix #27)

* new make target "test-shell" for bash related tests.
* shows that a study config is maintained across a true firefox restart
  (we could do even further along this path, if we need to).
* Mechanism.  start and kill fx with a study.  Start it again,
  and show second time study has same personid and starttime (which it
  will revive out of simple-storage.micropilot.<<studyname>>
convert to new system events (close #35)
`watch` will json.parse passed strings. Fix #21

`watch` continues to grow in power and 'smarts', by attempting to
`JSON.parse` subject and data.

`record` stays pure.

Notes / Rationale / Implications:

1.  Observer service expects (string or null) most places.

In particular, it doesn't handle having an `object` for `data`.  Most of
what we want to see for `data` are objects.  For channels we control, we
will handle this by adopting the convention of "json or it's a string".

https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIObserverService#notifyObservers%28%29

2.  Users must remember to serialize their objects, or they will get
`({}.toString())` (i.e., "[object Object]").  It's hard to see how one
would ever actually want this outcome, so we throw.
Version 0.9, system events,  parse json