* feat(executor): split executor into specialized components
* fix(executor): if there is a dependency on a block that is not along the selected path, ignore it; if we are at max iterations for a loop, stop
* feat(exector): cleanup inline comments in executor
* fix(executor): fix issue in removeDownstreamBlocks when we are breaking out of a loop to prevent infinite recursion
* feat(executor/tests): setup initial testing directory
* feat(executor): make the path selection for routing/conditional blocks independent of context, instead of deactivating paths we just activate others