Note about Fcommand side-effects
Use promises for Fcommand setup and execution

- simplifies mixing async and sync behaviour
- allows us to enforce some function is always called to cleanup or respond
Test post-conditions
Test import promise failure
Ensure it does return a Promise
Remove unneeded test

- code no longer exists for it
Better undefined checks
Check error string from failed import
Test run Fcommand
Test failure for running Fcommand
Fix typo
Support async resolution within Fcommand

- rather than using the return value from the Fcommand execution as the
  code to pass to the background script, supply a callback function (that
  is actually the resolver for the promise to execute the Fcommand) so
  that the Fcommand can do async actions and still supply a response
- it does mean that the 2nd argument to the Fcommand code MUST be called
  to signify that the Fcommand work has completed.  Detecting if this
  has not occurred is basically impossible (if there was a long-running
  Fcommand, you don't want to prematurely think there was a failure
  because the resolve function hasn't yet been called).
Use nested test descriptions for module