Split utils module

In this commit we split utils module into several parts:
- flow_utils, with code used in running flows;
- threading_utils, with code that helps in working with threads;
- reflection, with code that inspects python objects metadata;
- misc, with all the other code that used to live in utils.py.

We also move graph_utils into taskflow.utils package.

This commit just moves code around. It should not change any logic (with
exception of complex_graph example).

Change-Id: Iebfe45395f0ff502bc00fc7ae14829130b2c6abe
Further updates to update.py

1. Adjust how import reforming is done to use a function
   to reform the import line (after modification).
2. Clean the old copy of taskflow (if it exists) before
   placing a new copy in its place, this is very useful
   to avoid stale files.
3. Move some constants to be offical global constants.
4. Show exactly what modules are being used from the
   containing projects openstack.common.
5. Fix how the distributed flow was breaking imports due
   to the location/usage of logbook in that module no
   longer being functionally correct.
6. Add a header to each file copied/created that tells
   people not to modify them directly.

Change-Id: I6387722e092b93418bd63b722a95a8efcaef788d
Merge "Further updates to update.py"
Initial implementation of action-based engine

This is first in series of changes that provides separation of flows into
engines and pattens. Patterns define structure, while engine define how
the task should be run according to said structure.

This change adds the basic patterns and a very simple engine that
is able to run flow defined with patterns by converting it to recursive
structure of so-called 'actions'.

For simplicity and ease of review certain major features like
resumption, saving and passing on task results and notifications are
left out for farther changes.

Partially implements blueprint patterns-and-engines

Co-authored-by: Anastasia Karpinska <akarpinska at griddynamics.com>
Change-Id: I68515d8a5b30d5d047bf9beb67cc3e2111175190
Action engine: save task results

Task results are saved on success and passed to revert method
on revert. If task failed (execute method raised an exception),
special object of type taskflow.utils.misc.Failure is created
and saved as task result to indicate that.

To store results Storage class is introduced. As for now it is
simple tiny wrapper of a dictionary, but future plans include
rewriting it using persistence API and adding more sophisticated
functionality.

Change-Id: Ic806421a3780653602d8879c33fdf655950a6804