Add AbortAndRestart functionality

Add async.AbortAndRestart Exception that when raised, will cause the
Async to immediately stop executing, reset itself and reinsert itself.
Turn _restart function into a method on Async

Move _restart() from processors.py into a method in async.py as a method
on Async.
Fix update_options syntax in _restart and tests

Fix the syntax of setting _process_results. Also added first test for
_restart().
Update async._restart() tests

Add new test for async._restart() to test when a _process_result already
exists.

Also rename inner functions in _restart()
Add test_processors test for AbortAndRestart

Add a testcase in test_processors.py that ensures that when an Async
throws an AbortAndRestart that the async is reinserted.
Simplify AbortAndRestart procedure

Change processor.run_job() so that when it catches an AbortAndRaise
Exception it will call Async._restart() and return immediately.

Change Async._restart() so that it first checks if the Async is not
executing, then resets the _executing flag and calls Async.start().

Finally, update the tests to account for the above changes.
Update processor tests for updated restart

Ensure that error and success callbacks are not called when
AbortAndRestart is raised.
Enhance Async._restart() docstr

Fully explain the behavior of the Async._restart() method in the docstr.
Update tests again to ensure accuracy

Add test to check, that _restart() fails when the Async has already
finished. Plus clean up the docstrs on some more tests.
Merge pull request #42 from tannermiller-wf/abort_and_restart

Abort and restart