Instead of caching all failures in engine we cache them in storage, which is cleaner and more transparent. Behavior change: if task failed, then flow was suspended, then loaded again but without task with such name, such flow would be reverted now in engine.run(). Previously, such flow could be run normally as all data from not present tasks were ignored. Closes-bug: #1251736 Change-Id: I64e99ca98cc7fd28957ac2468577d677641aebdc