Changed _load_parent_scope() to be more efficient.
Changed some dict lookups to use get() instead of testing with 'in' first.
In the copy file rule, always run the rule, but mark the target as untouched if the files are identical.
Modified the caching strategy. Added the ability to modify the function to check whether something has changed (on a per-rule basis, if desired)