Add dependency to Task
Implement isExecutable to mean all dependencies are met
Synchronized Task's methods isExecutable, setState, setException
Remove hasSolution and identifySolution from SolvableException
(since getSolution is already sufficient)