Fix the second half of #145.
Fix the second half of #145.

When the client sm is transitioning, an external request to change modules left
the module un-destroyed, as it was possible for the .instantiate promise to
resolve after nextModule exited. Now, we use two, more explicit, boolean states
to track the right information so we do exactly the right amount of work to
destroy the module yet meet the module interface contract: if we call
willBeShownSoon, we'll call willBeHiddenSoon, and if we haven't, we won't.

google/chicago-brick,lankastersky/chicago-brick,lankastersky/chicago-brick,google/chicago-brick,google/chicago-brick,google/chicago-brick,lankastersky/chicago-brick