Fix function redefintion error if a member function is overloaded in some cases

This pull request is to fix member function resolution errorwhen some member functions have same signature as member functions that are overloaded with ```%thisptr``` parameter.  [MAGN-1436: function redefintion error if a member function is overloaded in some cases] (http://adsk-oss.myjetbrains.com/youtrack/issue/MAGN-1436). E.g., for the following class definition and method invoking:
```
class X
{
    def foo(x: X)      {...}
    def foo(x: X, y:X) {...}
}

x = X();
r = x.foo(x, x);
```
As member function ``def foo(x:X)`` is overloaded with ``def foo(%thisptr:X, x:X)``, at runtime ``r = x.foo(x, x);`` cannot be correctly resolved. 

There are some ways to fix the issue. The easiest one is not to change the existing ``%dot()`` call implementation, but at runtime we check if the member function call is on instance or not. 
  * If it is called on instance, thisptr has been removed from the argument list, so the member function candidates shouldn't contain those auto-generated member functions with ``%thisptr``. 
  * On the other hand, if the left hand side object is an array, to handle replication, ``%dot()`` will inject thisptr as the first argument to the argument list. In this case the method resolution should only check those auto-generated member functions with ``%thisptr``.
Reminds me of logic+naming cleanup needed to be done here.