Soft errors

This adds a boolean value to the Job definition called softError. When disabled, it behaves just like today. If enabled, however, it will not short-circuit its dependency graph even if it fails.

We have two use cases in particular: 1) we have a few 'soft' dependencies such as TaskA should logically run before TaskB, but TaskB is more encompassing and we want it to run even if TaskA fails and 2) Cleanup jobs that behave like 'finally' clauses, it should run to cleanup or shut-down a cluster regardless of the result of it's parents.

What do you guys thing?