Fixes visualizing a task graph with missing tasks

They show up as UNKNOWN (like luigi-grep). Prints out a warning message
when this occurs, though it can be quite noisy.

Fixes https://github.com/spotify/luigi/issues/122
Merge pull request #144 from JoeEnnever/vizfix

Fixes visualizing a task graph with missing tasks
Refactored the task history support added by jennever@foursquare.com
Merge pull request #142 from erikbern/task-history-refactoring

Refactored the task history support added by JoeEnnever
Changing HadoopJobRunner to use move_dir when moving results to final output since move_dir is atomic
Merge pull request #145 from anyman/master

Changing HadoopJobRunner to use move_dir
Revert "Changing HadoopJobRunner to use move_dir when moving results to final output since move_dir is atomic"

This creates issues as well since we will have an empty output dir that will trigger other jobs to run.

This reverts commit daa6e6368706759622e60db98c0ec73c7198fc0c.
Merge pull request #146 from anyman/master

Revert "Changing HadoopJobRunner to use move_dir
Retry if ping of scheduler fails

* Makes ping interval configurable
* Also adds accessible stop() method to stop workers' keep-alive-threads
Additional test for new Worker.stop method
Merge pull request #147 from spotify/freider/ping_retry

Retry if scheduler ping fails
Refactor Worker.add

Refactored the Worker.add method to make it more readable. Breaks out
some of the email/error logic for across the module.
Flatten recursive add into an explicit list-based stack
Remove __del__ on worker as it's undeterministic
Merge pull request #148 from spotify/freider/worker_add_refactor

Refactor Worker.add
Improve parameter parsing so it doesn't break the scheduler on weird parameter values

Adds failing unit test exposing broken parameter split
Merge pull request #149 from spotify/freider/broken_param_split

Improve scheduler-side parameter parsing
Merge branch 'master' of github.com:spotify/luigi