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
Implement builtin function EvaluateFunctionPointer()
Add test cases for EvaluateFunctionPointer()
Rename EvaluateFunctionPointer() to Evaluate(); add test cases
Add more test cases for Evaluate() function
Fixing Dispose issue on Geometry classes

- When the base class is not imported via FFI, ensure that all the
methods on base class is imported in derived class.
- Add ";" in ToString() method for constructors and function def nodes,
where there is no function body.
Merge pull request #163 from sharadkjaiswal/Namespace

Fixing Dispose issue on Geometry classes