Optimize node re-execution on function redefinition

1. Memoize the graphnodes in a list that contain user-defined function
calls
2. Refer to the graphnode list when selecting nodes to re-execute
3. Function redefinition test cases for overloaded functions
Merge pull request #158 from junmendoza/FunctionRedefinition

Optimize node re-execution on function redefinition