Workaround v8 optimizer bug

After some testing by @anodynos, @spion, and myself, we found a few
things other than adding an empty try/finally in _beget that seem to
workaround the v8 bug.  One is to do away with the arguments + ternary
operator deref in then(), in favor of reinstating the onProgress
parameter for now.

The other is to split _beget and delegate its work to a helper function.

After making that change, I realized that there's no need for a
similar arguments+ternary check in the main when() function, if we
reinstate the parameter there as well.  So, I changed that one too.