2.1.0 behaviour:


__git foo
    __package git --state present

__git bar
    __package git --state present


require="__git/foo" __git bar:

    __git bar
        __git foo
            __package git --state present
        __package git --state present
            __git foo                        <---|
                __package git --state present ---|

    -> detects circular dependency

--------------------------------------------------------------------------------

require="__apt_repository/somewhere-where-you-can-find-package-git __git/foo" __git bar

    __git bar
        __apt_repository somewhere-where-you-can-find-package-git

        __git foo
            __package git --state present
                __package_apt git depends nachher auf __apt_repository
        __package git --state present
            __git foo                        <---|
                __package git --state present ---|
            __apt_repository somewhere-where-you-can-find-package-git

possible solutions:
    - __package git does not depend on __git foo (clear dependency)
        - because it DOES NOT depend on it!
            - but we don't know whether this is always true :-/
    - multiple instances of __package git exist, with
        - different required BY
        - different requirements
    - define non inheritent dependencies (?)
        - because __git bar really depends only on __git foo
        - proposal: introduce require_non_recursive and require_recursive (previously: require)
    - recording the source of the dependency and use it to assist resolving (?)
        __package git: 
            inherited require: __git foo von __git bar
        __git foo:
            inherited autorequire: __package git durch Nutzung
    - break out circular references (?)
        - if either of both parties is only locked by the other, allow execution of this one?

--------------------------------------------------------------------------------

__package foo
    __package_apt foo

__package bar
    __package_apt bar

require="__package/foo" __package bar

    __package bar
        __package foo
            __package_apt foo
        __package_apt bar
            __package foo


--------------------------------------------------------------------------------

__type1 var1
    __type2 FIX

__type1 var2
    __type2 FIX


--------------------------------------------------------------------------------
facts:
    - use is different from require="", as use makes USED depend on parent deps
    - use = called/defined in the manifest of a type
    - it is currently not recorded, where an object gained its requirements and autorequirements
--------------------------------------------------------------------------------
requirements:
    - a type should be a black box: 
        I can require an object and it is ensured,
        everything it needs is executed before me.
    
--------------------------------------------------------------------------------
possible implementations
- requiring it should include everything it USES
--------------------------------------------------------------------------------
solutions:
    __type1 DEPENDS but does not use __type2 FIX
    

--------------------------------------------------------------------------------

Change proposal:

Each object only depends on the objects it directly requires, tree build to
ensure correct running behaviour:


__git bar
    __git foo
    __package git --state present

__git foo
    __package git --state present

Order:

1)
    __package/git (leaf node!)

2)
    __git/foo (new leaf node!)

3)
    __git/bar (new leaf node!)


For __package:

__sometype bar
    __package foo

__package foo
    __package_apt foo

1) __package_apt/foo (leaf node)

2) __package/foo (new leaf node)

3) __sometype/bar (new leaf node)
