CheckMemoryLeak: improve leak checking in function parameters

cppcheck fails for checking leak in:
```
void f() {
	if(TRUE || strcmp(strdup(a), b))
	if(!strcmp(strdup(a), b) == 0)
	42, strcmp(strdup(a), b);
}
```
Assuming that only a = f(leak()) is balcklisted passess all tests. Also added tests for undetected leaks.