Allow engines to be copied + blacklist broken flows

Allow engines to be copied to integrated projects via
update.py and for the time being blacklist threaded and
graph flow from being copied (to avoid breakage) until
the bugs associated with fixing those flows are fixed.

Also a bug was found that would not allow copying over
the utils module (since a utils.py file no longer
exists) so ensure that when we encounter a module (and
not a .py file) we can copy over the correct file that
belongs to that module (in the case of utils this would
be the __init__.py of the utils folder).

Also fixes a bug where it appears that due to our usage
of defaultdict we would copy over more modules than
desired due to how 'reading' a key in a defaultdict
actually creates that key using the default value which
caused these extra module inclusions.

Change-Id: I2aa732fc0baf269ee87aa72bfe8495e51ad21faf
Allow provides to be a set and results to be a dictionary

Instead of forcing task provides to be a tuple or list and
using the corresponding numerical index to determine how to
interpret the tasks results we should also allow for the task
provides to be a set and then allow for the tasks result to be
interpreted as a dictionary.

Fixes bug 1221998

Change-Id: Ibae689e7975d6782aa248d2b6e3691c44a89ef9f
Merge "Allow provides to be a set and results to be a dictionary"