Refactored CompositionBlock and the manager so that a streamlined running function can be employed.
The module code is now easier to comprehend and should be more failure-resistant in case of missing modules, dependency cycles and illegal resource references.
Note that the public API has changed w.r.t. resource passing to modules - a resource getter is now passed instead of a resource map/object.
Referring to a non-existent resource (not declared using requires()) results in the call throwing an error.