Function redefinition fix

This PR fixes bugs when a function is redefined in a codeblock 
1. Redefine a function by changing its name
2. Redefine a function by changing its arguments
All statements using these modified functions must be re-executed.

http://adsk-oss.myjetbrains.com/youtrack/issue/MAGN-5179

@lukechurch  @ke-yu 
@monikaprabhu pls see the related LiveRunner test. 

Can we add a test case for the case that the function is overloaded?

In this case, ``x = f(1);`` should be marked as dirty and ( gets re-executed? need more discussion). Why? because at compile time we are not able to decide if the overloaded function is a better candidate or not. For example:

```
def foo(x: int)
{
    return = x;
}

r = foo(bar()); // bar() returns a double 
```

then we add a new ``foo()``:

```
def foo(x: double) 
{
   ...
}
```

then ``r = foo(bar())`` should be re-executed. 

As we SSA the expression, i.e.,

```
%t1 = bar();
%t2 = foo(%t1);
```

here ``%t1`` probably is available so that we can inspect its type, so probably we could resolve at compile time and don't need to re-execute this statement....