Massive pylint cleanup
Add a nice run() method to the job class that will run a flow.

Add a run method that does the association of the flow with the
job and ensure that said association does not happen more than
once (aka the listeners are not duplicated).
Ensure we associate with parent flows as well.
More pylint cleanups
Ensure job is pending before we associate and run.
Fix flow exception wording
Fix state check
Specify that task provides/requires must be an immutable set.
Have the linear workflow verify the tasks inputs.

When a task is added ensure that the previous task, if
it exists creates the neccasary outputs for the task to
be added. If it does not then throw an exception.
Ensure we fetch the appropriate inputs for the running task.
Only do differences on set objects.
Make more tests for linear and shuffle test utils to common file.
More pylint cleanups
Always have a name provided.
Ensure we change the self and parents states correctly.

Change the state of the current flow in the rollback method
itself so that if we have parent workflows they also get there
states changed.
Allow any of the previous tasks to satisfy requirements.

Instead of just checking the previous task, allow any of the
previous tasks to provide the requirement for a new task.
Rename cause -> exception and make exception optional.
Merge pull request #19 from harlowja/cleanups-lint

Pylint + job run() + linear check.