Add a new method 'fireCalculationFailed'

Add new method 'fireCalculationFailed', not to set workState to
WS_CANCELED forcibly, just try to change it from WS_WORKING to
WS_CANCELED while a Throwable be caught from 'calculateResult'. Because
the old way may cancels the new calculation.