Merge branch 'asynctypes-685526'
Merge branch 'master' into exec-754315
exec-729514: Encapsulate the Canon

Previously there was a set of singleton stores of data, and some
exported functions (addCommand/removeCommand/etc) that manipulated them.
This made it impossible to have more than one set of commands which
made testing importing commands from one place to another hard. So this
change creates a Canon object to encapsulate those stores/functions.

Signed-off-by: Joe Walker <jwalker@mozilla.com>
exec-729514: Fixing command transplants

A few changes that fix the way we handle command proxying:
- getCommandSpecs now clones the commandSpecs object rather than
  exposing it to the outside
- Add an 'isParent' property to a commandSpec so the client side knows
  whether or not to generate an exec function
- Create a parent command for the set of imported commands

Signed-off-by: Joe Walker <jwalker@mozilla.com>
exec-729514: Add unit tests

Also some minor tidy-ups for testCompletion.

Signed-off-by: Joe Walker <jwalker@mozilla.com>
exec-729514: Outstanding work: WARNING WILL REBASE

This branch will be rebased before it is done. You have been warned.