Previously copying a Task always returned an instance of Task even when we are cloning a subclass, such ConditionalTask.
This commit ensures that the clone preserve the original class type
* before kickoff breaks if inputs are none.
* improve none type
* Fix failing tests
* add tests for new code
* Fix failing test
* drop extra comments
* clean up based on eduardo feedback