get_func_args maximum recursion fix #728

Fix for the issue: #728
> 1- Not sure if needed, just intended to not allow a second call. With it looks safer.

I'm +0 about this, but IMO without a test for the unsafe case it doesn't make sense to check for stripself. If you are really worried about not allowing a second call then pass a flag argument or depth counter to `get_func_args`.

> 2- I don't think it will change anything, like this is part of the default.

that's the idea, it won't change the logic but uses idiomatic code to write the same thing.

instead of:
```python
if cond1:
    return A
else:
    if cond2:
        return B
    return C
```

it can be written as:
```python
if cond1:
    return A
elif cond2:
    return B
else:
    return C
```

(optionally) if A and B are equal then just:
```python
if cond1 or cond2:
    return A
else:
   return C
```

which for this case ends up like:
```python
if inspect.isroutine(func) or getattr(unc, '__name__', None) == '__call__':
    return []
else:
    return get_func_args(func.__call__, True)
```