Add Rake::Task#prerequisite_tasks!

Add Rake::Task#prerequisite_tasks! method to return a full list
of prerequisite tasks from the receiver tasks and its prerequisite
tasks tasks, recursively.

This is usefull if one needs to call reenable on a task and all
of its prerequisite tasks.

Other alternatives for the method name may be #deep_prerequisite_tasks
based on deep_clone or deep_copy.

The implementation proposed sets a default depth limit of 30 to avoid
circular dependency(SystemStackError: stack level too deep).

Signed-off-by: João Soares <jsoaresgeral@gmail.com>
Add comments to Rake::Task#prerequisite_tasks!

Signed-off-by: João Soares <jsoaresgeral@gmail.com>
New implementation without duplicates

Rename Rake::Task#prerequisite_tasks! to
Rake::Task#all_prerequisite_tasks.

Reimplement Rake::Task#all_prerequisite_tasks to not return duplicates.

Add protected helper method to recursively collect dependencies
rejecting duplicates.

Abstract tests from returned list order.

Signed-off-by: João Soares <jsoaresgeral@gmail.com>
Merge branch 'deep_prerequisite_tasks' of https://github.com/jasoares/rake into prereq2

* 'deep_prerequisite_tasks' of https://github.com/jasoares/rake:
  New implementation without duplicates
  Add comments to Rake::Task#prerequisite_tasks!
  Add Rake::Task#prerequisite_tasks!
Remove unneeded "unless".
Switch to hash for recording already seen tasks in all_prerequisite_tasks.