Add possibilty to, while computing nodes:
add more nodes to the task manager,
edit, duplicate and remove nodes without breaking the tasks that are submitted
* store status file last modification time on NodeChunk
* ChunksMonitor: don't stop the underlying thread when changing chunks, only modify the list of monitored files + use a mutex for thread-safety
[flake8](http://flake8.pycqa.org) testing of https://github.com/alicevision/meshroom on Python 3.7.1
$ __flake8 . --count --select=E9,F63,F72,F82 --show-source --statistics__
```
./meshroom/core/node.py:461:34: F632 use ==/!= to compare str, bytes, and int literals
if v is not None and v is not '':
^
./meshroom/core/node.py:480:34: F632 use ==/!= to compare str, bytes, and int literals
if v is not None and v is not '':
^
2 F632 use ==/!= to compare str, bytes, and int literals
2
```
* add 'matchDescription' method on desc.Attribute.
* desc.ListAttribute/desc.GroupAttribute: 'matchDescription' ensure that value perfectly match element/group description. Enable recursive checking for child attributes.
* nodeFactory: detect DescriptionConflicts in pre-process pass by checking that serialized node's attributes perfectly match their descriptions
* CompatibilityNode.attributeDescFromNameAttribute: consider link expressions as valid values
* test_compatibility: more complete description conflicts unit testing
* add Node.globalStatus property: indicates the status of a Node based on the status of its own NodeChunks
* remove obsolete 'statusNames' and 'getStatus' methods
handle this low-level operation engine side
* fix ListAttribute children links duplication
* handle CompatibilityNode duplication
* move corresponding unit test in test_graph.py
* [ui] add DuplicateNodeCommand
Improve node serialization/deserialization to be able to recreate the exact same node in the graph when loading a meshroom project, even if the corresponding node's description has changed or does not exist anymore. This allows to recover already computed data on disk, without being impacted by changed uids. CompatibilityNode also provides an on-demand upgrade system to turn into a Node that meets the current node description (if possible).
* new abstract class BaseNode, base class for Node and CompatibiliyNode
* Node: serialize everything needed to spawn a CompatibilityNode with precomputed outputs: inputs, uids, parallelization settings, unresolved internal folders and outputs
* node_factory: handles node deserialization and compatibility issues to create either a Node or a CompatibilityNode
* add compatibility unit tests
* add _computeUids internal method + store computed uids in a dedicated dict
* cache override:
* add optional cacheDir parameter on updateInternal method to override graph cache directory
* _buildCmdVars always update member variable '_cmdVars'
* CameraInit: ensure node does not belong to a graph and use updateInternals with temp cache directory