Fix method recursion bug.

Additional checks for method call transformations.
Reset location when creating a method dispatcher

When creating a method dispatcher, the location of the underlying
method was copied. Under some circumstances, the name of the
location (loc.r) was already initialized, in which case the
method dispatcher shared a name with one of the methods, leading
to a C compiler error. By setting loc.r to nil when copying
the dispatcher information from the original method, we ensure
that the dispatcher C function gets its proper name.
Added test case for recursive methods.
Fix dispatcher creation for method prototypes.

When method prototypes were involved (e.g. forward declarations
for mutual recursion), calls were sometimes dispatched to the
wrong method implementation. One of the reasons was that method
dispatchers were then not always attached to method ASTs in
the correct place.
Merge pull request #1609 from rbehrends/fix-method-dispatch

Fix method recursion bug.