Prevent an error inside an action from crippling the system.

Previously, if an error occurred inside an action, the `currentAction` state was never
removed and it would always look as though an action was dispatching, which intentionally
breaks since actions should not cascade.

This commit also subtly changes the protection mechanism that prevents cascading actions.
Previously, two synchronous dispatches would throw an error if they were executed
one after the other. I believe this was incorrect; the spec specifies that dispatches
should not cascade, i.e. an action handler should not trigger another action, but not
that multiple dispatches cannot occur synchronously.