1. Manifests need type explorers to be run before
    Only this way the manifest can use the values

2. Type explorers can depend on the (successful) execution of other objects
    A type explorer may lookup values (ownership, size, processes, etc.)
    that are depending on the code of other objects.

3. The 'require="a" b' dependency specifies only that execution of b needs to wait until a is finished
    Other requirements given at another position may not be
    executed before b, as cdist interprets require="a" as 
    "a is everything that is needed to realise b"
 
4. The 'require' state is thus *not* suitable to trigger reloads
    A type b, which uses the require="" statement to wait for all
    require="" dependencies, may be executed in an incomplete
    status.

5. Depending on multiple dependencies defined at different locations requires all objects to be present
    Because otherwise the dependent object cannot be sure that the
    list of objects it waits for is complete.

6. If a statement requires all objects to be present, all manifests must have run already.
    If all manifests have run already, also all type explorers have run already (#1).
    If all type explorers have run already, some objects may have been finished completly already (#2).

7. Because of #4 and #6, we need to introduce another dependency that allows reloading after

8. Because the object could be finished already due to a 'require' dependency, we need another script
    Maybe "gen-post-run-local", "gen-post-run-remote"
